{ ========================================================================= PROGRAMA : MAINMENU OBJETIVO : INICIAR EL MENU DEL SISTEMA PROGRAMADOR : ING. JUAN SOTO FECHA : 13 de Marzo 2009 ======================================================================== } IMPORT os CONSTANT filename = "mainmenu.data" DEFINE dirs DYNAMIC ARRAY OF RECORD ddir STRING END RECORD DEFINE datt DYNAMIC ARRAY OF RECORD ddir STRING END RECORD DEFINE mbs DYNAMIC ARRAY OF RECORD mbs STRING, prog STRING, type STRING, desc STRING END RECORD DEFINE nmbs INTEGER DEFINE longDesc STRING MAIN DEFINE cmd STRING DEFINE elemento STRING DEFINE currForm ui.Form OPTIONS ACCEPT KEY RETURN OPTIONS INPUT WRAP CALL ui.Interface.loadStyles("mainmenu") OPEN FORM main FROM "mainmenuform" DISPLAY FORM main DISPLAY "Johnny Soto" TO datusu CALL init_mbs() DIALOG ATTRIBUTES(FIELD ORDER FORM, UNBUFFERED) DISPLAY ARRAY dirs TO dirs.* BEFORE ROW CALL sync_mbs(DIALOG) CALL DIALOG.setCurrentRow("mbs",1) # CALL DIALOG.getCurrentItem() RETURNING elemento # DISPLAY "Elemento=",elemento END DISPLAY DISPLAY ARRAY mbs TO mbs.* END DISPLAY INPUT BY NAME longDesc END INPUT BEFORE DIALOG CALL DIALOG.setArrayAttributes("dirs",datt) CALL DIALOG.getForm() RETURNING currForm CALL currForm.setFieldStyle("formonly.ddir","negrita") ON ACTION show CALL show_mbs(DIALOG) ON ACTION close EXIT DIALOG END DIALOG END MAIN FUNCTION show_mbs(d) DEFINE d ui.Dialog DEFINE rdir, rmbs INTEGER DEFINE cmd,pwd STRING LET rdir = d.getCurrentRow("dirs") LET rmbs = d.getCurrentRow("mbs") IF mbs[rmbs].prog IS NULL THEN RETURN END IF IF mbs[rmbs].type = "services" THEN { LET cmd = "cd " || dirs[rdir].ddir || " && fglrun " || mbs[rmbs].prog IF os.Path.dirname(dirs[rdir].ddir)="Tools" THEN -- Special treatment for the Tools dir: all tools must have shells to start program IF fgl_getenv("WINDIR") IS NOT NULL THEN LET cmd = ".\\Tools\\" || os.Path.basename(dirs[rdir].ddir) || "\\" || mbs[rmbs].prog || ".bat" call fgl_winmessage("prueba",cmd,"stop") ELSE LET cmd = "./Tools/" || os.Path.basename(dirs[rdir].ddir) || "/" || mbs[rmbs].prog || ".sh" END IF END IF } LET cmd = fgl_getenv("FGLPROG") || "\\" || mbs[rmbs].prog || ".bat" call fgl_winmessage("prueba",cmd,"stop") RUN cmd WITHOUT WAITING RETURN END IF IF mbs[rmbs].type = "file" THEN CALL showfile(dirs[rdir].ddir || "/" || mbs[rmbs].prog) RETURN END IF END FUNCTION FUNCTION init_mbs() DEFINE reader om.XmlReader, attributes om.SaxAttributes, i SMALLINT, saxevent STRING LET reader = om.XmlReader.createFileReader(filename) LET attributes = reader.getAttributes() LET saxevent = reader.read() CALL dirs.clear() CALL mbs.clear() WHILE saxevent IS NOT NULL CASE saxevent WHEN 'StartDocument' LET nmbs=0 WHEN 'StartElement' CASE reader.getTagName() WHEN 'mbs' -- Nothing WHEN 'DDir' CALL dirs.appendElement() LET i=dirs.getLength() LET dirs[i].ddir = attributes.getValue('name') LET datt[i].ddir = attributes.getValue('color') WHEN 'mbs' -- Nothing OTHERWISE DISPLAY "Error: wrong tagName:",reader.getTagName() END CASE WHEN 'EndElement' -- Nothing END CASE LET saxevent=reader.read() END WHILE END FUNCTION FUNCTION sync_mbs(d) DEFINE d ui.Dialog DEFINE reader om.XmlReader, attributes om.SaxAttributes, saxevent,ddir STRING DEFINE n INTEGER LET reader = om.XmlReader.createFileReader(filename) LET attributes = reader.getAttributes() LET saxevent = reader.read() INITIALIZE longDesc TO NULL CALL mbs.clear() WHILE saxevent IS NOT NULL CASE saxevent WHEN 'StartDocument' LET nmbs=0 WHEN 'StartElement' CASE reader.getTagName() WHEN 'mbs' -- Nothing WHEN 'DDir' IF attributes.getValue('name') == dirs[d.getCurrentRow("dirs")].ddir THEN LET saxevent = reader.read() WHILE saxevent IS NOT NULL IF saxevent == 'StartElement' THEN CASE reader.getTagName() WHEN 'mbs' CASE attributes.getValue('type') WHEN "V" CALL mbs.appendElement() LET n = mbs.getLength() LET mbs[n].type="services" LET mbs[n].mbs=attributes.getValue('name') LET mbs[n].prog=attributes.getValue('program') LET mbs[n].desc=attributes.getValue('description') WHEN "B" IF attributes.getValue('program') == "README" THEN LET longDesc = readfile(dirs[d.getCurrentRow("dirs")].ddir || "/README") ELSE CALL mbs.appendElement() LET n = mbs.getLength() LET mbs[n].type="file" LET mbs[n].mbs=attributes.getValue('name') LET mbs[n].prog=attributes.getValue('program') LET mbs[n].desc=attributes.getValue('description') END IF WHEN "C" CALL mbs.appendElement() LET n = mbs.getLength() LET mbs[n].type="file" LET mbs[n].mbs=attributes.getValue('name') LET mbs[n].prog=attributes.getValue('program') LET mbs[n].desc=attributes.getValue('description') END CASE OTHERWISE RETURN END CASE END IF LET saxevent = reader.read() END WHILE END IF WHEN 'mbs' OTHERWISE DISPLAY "Error: wrong tagName:",reader.getTagName() END CASE WHEN 'EndElement' -- Nothing END CASE LET saxevent=reader.read() END WHILE END FUNCTION FUNCTION showfile(fn) DEFINE fn STRING DEFINE txt STRING OPEN WINDOW w WITH FORM "maindisp" ATTRIBUTE(TEXT="File: ["||fn||"]",STYLE="dialog") LET txt = readfile(fn) INPUT BY NAME txt WITHOUT DEFAULTS LET int_flag=FALSE CLOSE WINDOW w END FUNCTION FUNCTION readfile(fn) DEFINE fn STRING DEFINE txt STRING DEFINE ln STRING DEFINE ch base.Channel LET ch=base.Channel.create() call fgl_winmessage("prueba",fn,"stop") CALL ch.openfile(fn,"r") CALL ch.setDelimiter("") WHILE ch.read(ln) IF txt IS NULL THEN IF ln IS NULL THEN LET txt = "\n" else LET txt = ln END IF ELSE IF ln IS NULL THEN LET txt = txt || "\n" ELSE LET txt = txt || "\n" || ln END IF END IF END WHILE CALL ch.close() RETURN txt END FUNCTION