home *** CD-ROM | disk | FTP | other *** search
- *****************************************************************************
- * *
- * dbTALK Laser Disk Sample Application *
- * Adapted by Dele Olajide *
- * January 1993 *
- * *
- *****************************************************************************
-
- * Define Compiler Constants
-
- #DEFINE HELP 28
- #DEFINE K_ESC 27
- #DEFINE K_DOWN 24
- #DEFINE K_UP 5
- #DEFINE K_RIGHT 4
- #DEFINE K_LEFT 19
- #DEFINE K_HOME 1
- #DEFINE K_END 6
- #DEFINE K_PGUP 18
- #DEFINE K_PGDN 3
- #DEFINE BROWSE 98
- #DEFINE REPORT 114
- #DEFINE CATEGORY 99
- #DEFINE ABOUT 1203
- #DEFINE CHART -5
- #DEFINE LINE -10
- #DEFINE BAR2D -11
- #DEFINE BAR3D -12
- #DEFINE PRINT_WP 1301
- #DEFINE PRINT_TXT 1302
- #DEFINE PRINT_123 1303
- #DEFINE PRINT_PRN 1304
-
-
- * Main Program Starts
-
- FUNCTION Main
- PRIVATE oLaserScrn, oDbView, oBrowseScrn, oLaserTab, oLaserHelp, oDesc
- PRIVATE oLaserRep, oLaserChart, HelpText, nHelp
- PRIVATE nEvent, lRefresh, aButts, aCateg, nMemory, LaserRep
- PRIVATE oPrintScrn, oLaserWP, oLaserLST, oLaser123, oLaserTXT
-
- * Declare Menu Structure
- PRIVATE mtext := {"File", "Edit", "About"}
- PRIVATE mkey := { 289, 274, 286}
- PRIVATE mfile_t := {{"Browse", "Chart", "Report", "Exit"}, {"Next","Previous"}, {"About"}}
- PRIVATE mfile_k := {{BROWSE, CATEGORY, REPORT, K_ESC},{K_RIGHT, K_LEFT}, {ABOUT}}
-
- * Declare Browse GETSET Blocks
- PRIVATE catnoblk:={|| laser->catno}
- PRIVATE titleblk:={|| left(laser->title, 25)}
- PRIVATE priceblk:={|| transform(laser->price, '##.##')}
-
- * Declare Browse Skip Blocks
- PRIVATE bblk:={|| oDbView:Send('GoBottom','LASER')}
- PRIVATE tblk:={|| oDbView:Send('GoTop','LASER')}
- PRIVATE sblk:={|n| oDbView:Send('Skip','LASER',n)}
-
- * Declare Browse Action Block
- PRIVATE ablk:={|nkey| self:Send('NoEdits', nkey)}
-
- * Declare Browse Structure
- PRIVATE bcols:={{'CATLOG NO', catnoblk}, {'TITLE', titleblk}, {'PRICE', priceblk}}
-
- * Declare Report Field Blocks
- PRIVATE bFld1:={||laser->catno}
- PRIVATE bFld2:={||laser->title}
- PRIVATE bFld3:={||acateg[laser->ncat]}
-
- * Declare Report Field Structures
- PRIVATE aFld1:={bFld1, 'laser->catno', 'C', {'Catalog Number'}, 10, 0, .F., '@!'}
- PRIVATE aFld2:={bFld2, 'laser->title', 'C', {'Film Title'}, 50, 0, .F., '@!'}
- PRIVATE aFld3:={bFld3, 'acateg[laser->ncat]', 'C', {'Category'}, 18, 0, .F., '@!'}
-
- * Declare Report Structure
- Laserrep:={{'Laser Collection','Listing of Films'},80,0,0,66,1,.f.,.f.,.f.,.f.,{afld1,afld2,afld3},{},''}
-
- * Declare Film Category Descriptions
- aCateg = {'Action','Mystery','Suspense','Childrens','Comedy','Documentery',;
- 'Drama','Foreign','Horror','Music','Musical','Sci-fiction'}
-
- * Declare all ADLClass Objects
- oDbView = ADLClass('DBF', laservew)
- oDbView:Send('Open')
- oDbView:Send('SetOrder',1) // Open Creates MEM variables for SCN Classes
-
- oBrowseScrn:= ADLClass('SCN', laserbrw)
- oLaserScrn:= ADLClass('SCN', laserscr)
- oLaserChart:= ADLClass('SCN', lasercht)
- oLaserHelp:= ADLClass('SCN', laserhlp)
- oPrintScrn:= ADLClass('SCN', laserprn)
- oLaserRep:= ADLClass('REP', laserrep)
- oLaserTab := ADLClass('TAB', {bcols, bblk, tblk, sblk, ablk})
- oLaserWp:= ADLClass('WP', {'WP', 'laser.doc', ''} )
- oLaserTxt:= ADLClass('TXT', 'laser.doc')
- oLaserLST:= ADLClass('PRN')
- oLaser123:= ADLClass('WP', {'123', 'laser.wk1', ''} )
-
- SetTimer(750) // Setup Timer Event after 750 keyboard scans
-
- oDbView:Send('Read','LASER') // Process First Record
- nCat = pad(aCateg [nCat], 15)
-
- oLaserScrn:Send('AttachMenu', {'Laser Disk Collection System',mtext,mkey,mfile_t,mfile_k})
- oLaserScrn:Send('Bar')
- oLaserScrn:Send('Display',sanserif)
- oDesc = oLaserScrn:Send('Object', 'DESC') // Setup Main Screen
-
- lRefresh = .F.
- nHelp = 1 // Setup Default help screen
- nEvent = oLaserScrn:Send('Read')
-
- * Enter Main Event Loop
- DO WHILE .T.
-
- DO CASE
- CASE nEvent = K_ESC // End of Application
-
- IF YESNOBOX ('Warning', 'Do you wish to Quit')
- EXIT
- ENDIF
-
- CASE nEvent = K_RIGHT // Next Record
- IF ! oDbView:Send('Skip', 'LASER', 1) = 0
- lRefresh = .T.
- ENDIF
-
- CASE nEvent = K_LEFT // Previous Record
- IF ! oDbView:Send('Skip', 'LASER', -1) = 0
- lRefresh = .T.
- ENDIF
-
- CASE nEvent = K_PGUP // 10 recs backward
- IF ! oDbView:Send('Skip', 'LASER', -10) = 0
- lRefresh = .T.
- ENDIF
-
- CASE nEvent = K_PGDN // 10 recs forward
- IF ! oDbView:Send('Skip', 'LASER', 10) = 0
- lRefresh = .T.
- ENDIF
-
- CASE nEvent = K_HOME // First Record
- oDbView:Send('GoTop', 'LASER')
- lRefresh = .T.
-
- CASE nEvent = K_END // Last Record
- oDbView:Send('GoBottom', 'LASER')
- lRefresh = .T.
-
- CASE nEvent = BROWSE
- nHelp = 2
- self:Send('BrowseLaser')
-
- CASE nEvent = REPORT
- self:Send('LaserList')
-
- CASE nEvent = CATEGORY
- IF YESNOBOX('Chart Categories','Do you wish to continue')
- nHelp = 3 // Set help Context
- oLaserScrn:Send('Message', 'Please Wait...')
- self:Send('LaserChart')
- ENDIF
-
- CASE nEvent = ABOUT
- nMemory = memory(0)
- MsgBox('About', ExpandText(GetPointer(aboutmsg)), drawer)
- ENDCASE
-
-
- IF lRefresh .and. ! oDbView:Send('eof', 'LASER') .and. ! oDbView:Send('bof', 'LASER')
-
- BEGIN
- oDbView:Send('Read', 'LASER') // Different Record Refresh Screen
- nCat = pad(aCateg [nCat], 15)
- oLaserScrn:Send('Refresh')
- oLaserScrn:Send('Message', space(50))
- END
- ENDIF
-
- lRefresh = .F. // Reset for Next Record
- nHelp = 1
- nEvent = oLaserScrn:Send('Read')
- ENDDO
-
- oLaserScrn:Send('Clear')
- QUIT()
- RETURN
-
-
-
- * Routine called everytime a field is selected
-
- FUNCTION Select
- PARAMETER cFld, oFld, oScr
- PRIVATE lSelect:=.F.
-
- IF cFld = 'OLASERTAB' .or. cFld = 'DESC' // allow desc & browse to
- lSelect = .T. // be selected
- ENDIF
- RETURN lSelect
-
-
-
- * Routine called everytime a field is de-selected
-
- FUNCTION Unselect
- PARAMETER cFld, oFld, oScr
- PRIVATE lValid:=.T.
-
- IF cFld = 'DESC' // Update Database with desc changes
- oDesc:Send('Refresh')
- laser->desc = m->desc
- oLaserScrn:Send('Message', 'Comments have been updated')
- ENDIF
-
- RETURN lValid
-
-
-
- * Routine called everytime a hotspot is clicked on a screen
-
- FUNCTION Click
- PARAMETER nEvent
- RETURN nEvent
-
-
-
- * Routine called everytime an event a received
-
- FUNCTION Handle
- PARAMETER nEvent
-
- IF nEvent = HELP
- HelpText = HelpText (nHelp)
- oLaserHelp:Send('Display',sanserif)
- oLaserHelp:Send('Wait')
- oLaserHelp:Send('Clear')
- ENDIF
-
- oLaserScrn:Send('Message', 'Time '+time())
- RETURN nEvent
-
-
-
- * Routine to Browse laser Collection
-
- FUNCTION BrowseLaser
- BEGIN
- oBrowseScrn:Send('Display',courier)
- nEvent = oBrowseScrn:Send('Wait') // Handle within Click
- oDbView:Send('Read', 'LASER')
- nCat = pad(aCateg [nCat], 15)
- oBrowseScrn:Send('Clear')
- oLaserScrn:Send('Message', space(50))
- END
- RETURN
-
-
-
- * Routine to Disable editing in browse called by browse Action parameter
-
- FUNCTION NoEdits
- PARAMETER nKey
-
- IF nKey = 13
- nKey = 0
- oLaserScrn:Send('Message', 'No Editing Allowed')
- ENDIF
- RETURN nKey
-
-
-
- FUNCTION LaserList
- PRIVATE oLaserPrn
-
- oPrintScrn:Send('Display',courier) // Get Destination Device
- nEvent = oPrintScrn:Send('Read')
-
- WHILE ! nEvent = K_ESC // User cancels print
-
- DO CASE
- CASE nEvent = PRINT_WP // Assign Print Object
- oLaserPrn = oLaserWp
- EXIT
- CASE nEvent = PRINT_TXT
- oLaserPrn = oLaserTxt
- EXIT
- CASE nEvent = PRINT_123
- oLaserPrn = oLaser123
- EXIT
- CASE nEvent = PRINT_PRN
- oLaserPrn = oLaserLST
- EXIT
- ENDCASE
-
- nEvent = oPrintScrn:Send('Read')
- ENDDO
-
- IF ! nEvent = K_ESC // User Selects Print device
- BEGIN
- oLaserPrn:Send('Open') // Start Printing
- oLaserRep:Send('Initiate', oLaserPrn, '')
- oDbView:Send('Gotop','LASER')
- END
-
-
- DO WHILE ! oDbView:Send('eof', 'LASER') // Until last record
- BEGIN
- oLaserRep:Send('Generate')
- oLaserScrn:Send('Message', laser->title+' has been printed')
- oDbView:Send('skip','LASER',1)
- END
- ENDDO
-
-
- BEGIN
- oDbView:Send('Gotop','LASER') // Reset to first rec
- oLaserRep:Send('Terminate')
- oLaserPrn:Send('Close')
- END
-
- ENDIF
-
- BEGIN
- oPrintScrn:Send('Clear') // Tidup, restore screen
- oLaserScrn:Send('Message', space(50))
- END
- RETURN NIL
-
-
-
-
- FUNCTION LaserChart
- PRIVATE oChart, aChart
- PRIVATE aChartXaxis, aChartVals, aChartValBlk:={|| aChartVals}
-
- aChartVals = {{ 0,0,0,0,0,0,0,0,0,0,0,0 }}
- aChartXaxis = {'ACT','MYS','SUS','CHI','COM','DOC','DRA','FOR','NOR','MUS','MSC','SCF'}
-
- oDbView:Send('Gotop','LASER')
-
- DO WHILE ! oDbView:Send('eof', 'LASER')
- BEGIN
- aChartVals[1, laser->nCat] = aChartVals[1, laser->nCat] + 1
- oDbView:Send('skip','LASER',1)
- END
- ENDDO
-
- BEGIN
- oLaserScrn:Send('Message', space(50))
- oLaserChart:Send('Display',courier)
- aChart = oLaserChart:Send('Attributes', CHART)
- oChart = ADLClass('CHT', {aChart, aChartValBlk, aChartXaxis, 'Distribution of Film Categories'} )
- oChart:Send('LineGraph')
- nEvent = oLaserChart:Send('Read')
- END
-
- DO WHILE nEvent <> 27 // Until user requests end, select
- DO CASE // Graph and print it. generate PIC files
- CASE nEvent = LINE
- oChart:Send('LineGraph','LINEGRPH.PIC')
-
- CASE nEvent = BAR2D
- oChart:Send('Bar2D', 'BAR2GRPH.PIC')
-
- CASE nEvent = BAR3D
- oChart:Send('Bar3D', 'BAR3GRPH.PIC')
- ENDCASE
-
- nEvent = oLaserChart:Send('Read')
- ENDDO
-
- BEGIN
- oDbView:Send('Gotop', 'LASER') // Reset to First Record
- oDbView:Send('Read', 'LASER')
- nCat = pad(aCateg [nCat], 15)
- oLaserChart:Send('Clear')
- oLaserScrn:Send('Message', space(50))
- END
- RETURN
-
-
-
-
-
-
-