program XTRCSV,1.0(100) ! test/demo XTREE.sbr using file csv input !-------------------------------------------------------------------- ! EDIT HISTORY ![100] 14-Aug-09 based on created (from xtrfil,1.0(110)) /jdm ! !------------------------------------------------------------------- ++PRAGMA ERROR_IF_NOT_MAPPED "ON" ! (avoid stupid unmapped symbol errors) ++include ashinc:XTREE.MAP ++include ashinc:XTREE.DEF ++include ashinc:ASHELL.DEF MAP1 MISC MAP2 TEXT,S,256 MAP2 EXITCODE,F MAP2 MAXCHOICE,F,6 ! now determined dynamically from file MAP2 SROW,F MAP2 SCOL,F MAP2 TROW,F MAP2 ECOL,F MAP2 EROW,F MAP2 COLDEF,S,600 MAP2 FILE$,S,25 MAP2 X,F MAP2 PLINE,S,500 MAP2 FILIDX,B,4 MAP2 CH,F,6,9 MAP2 MAXARY,F,6,1000 MAP2 SELROW,F,6 MAP2 I,F MAP1 PROGRAM'OPTIONS MAP2 MSEL$,S,1 MAP2 FILANS$,S,1 MAP2 AC$,S,1 MAP2 HDR$,S,1 MAP1 XFLAGS MAP2 FLAGS,B,4 MAP2 FLAGS2,B,4 MAP1 ANSWERX ! ANSWERX may be used now for either: MAP2 ANSARY(1000),S,1 ! multi-selection MAP1 ANSWER,B,4,@ANSWERX ! or single selection MAP1 ANSWER$,S,1000,@ANSWERX ! (convenient string format for display) [108] !Colors: 0=blk,1=wht,2=blu,3=mag,4=red,5=yel,6=grn,7=cyan MAP1 MMOCLR ! HELP memo colors MAP2 BFCLR,B,1,3 ! border fg MAP2 BBCLR,B,1,2 ! border bg MAP2 TFCLR,B,1,0 ! text fg MAP2 TBCLR,B,1,1 ! text bg MAP2 AFCLR,B,1,3 ! arrows fg MAP2 ABCLR,B,1,2 ! arrows bg MAP2 PFCLR,B,1,-1 ! prompt fg MAP2 PBCLR,B,1,-1 ! prompt bg MAP2 WFCLR,B,1,5 ! warnings & messages fg MAP2 WBCLR,B,1,0 ! " " " bg MAP2 SFCLR,B,1,-1 ! orig. status line fg MAP2 SBCLR,B,1,-1 ! orig. status line bg MAP2 RFCLR,B,1,-1 ! ruler/reserved fg MAP2 RBCLR,B,1,-1 ! ruler/reserved bg FLAGS = 0 FLAGS = FLAGS or XTF_FKEY ! allow F1-F16 FLAGS = FLAGS or XTF_LEFT ! allow LEFT arrow exit FLAGS = FLAGS or XTF_RIGHT ! " RIGHT FLAGS = FLAGS or XTF_UP ! " UP FLAGS = FLAGS or XTF_TAB ! " TAB FLAGS = FLAGS or XTF_XYXY ! alternate coordinate sys FLAGS = FLAGS or XTF_SORT ! allow sorting FLAGS = FLAGS or XTF_REORD ! allow reordering FLAGS2 = 0 FLAGS2 = FLAGS2 or XTF2_CSV ! CSV mode!! XTR'USETHEMES = 1 LOOP: ? tab(-1,0);"Test XCALL XTREE using CSV input (hit ENTER for defaults)" SROW = 5 SCOL = 5 EROW = 20 ECOL = 75 GETFIL: input line "Enter CSV FILE [xtrcsv.csv]: ";FILE$ if FILE$="" FILE$="xtrcsv.csv" if instr(1,FILE$,".")<1 then FILE$ = FILE$ + ".csv" endif ! check if file exists and if first line appears to be a COLDEF lookup FILE$,X if X=0 ? FILE$;" not found! " : goto GETFIL open #1, FILE$,input input line #1, PLINE if instr(1,PLINE,"~~") > 0 then FLAGS = FLAGS or XTF_COLDFX or XTF_FCOLDEF ? "Columns appear to be defined using advanced COLDEF syntax" input "Do you want to add additional COLDEF features? ",AC$ if ucs(AC$)="Y" then input line "{-skip}[+|=]{0~0~x~H~...~~}: ",COLDEF endif else if instr(1,PLINE,",") < 1 then ? "File doesn't appear to be in CSV format!!" goto GETFIL endif input line "Optional coldef: {-skip}[+|=]{0~0~x~H~...~~}: ",COLDEF if COLDEF # "" then FLAGS = FLAGS or XTF_COLDFX endif endif close #1 input "Multi-select? [N] ",MSEL$ if ucs(MSEL$)="Y" FLAGS = FLAGS or XTF_MSEL if ucs(MSEL$)#"Y" then input "Use ANSWER to set/return selection? [N] ",FILANS$ ! [106] if ucs(FILANS$)="Y" then FLAGS = FLAGS or XTF_FILANS endif endif if (FLAGS and XTF_FCOLDEF)=0 then input "Treat first row as headers? [Y] ",HDR$ if ucs(HDR$) # "N" then HDR$ = "Y" if ucs(HDR$) = "N" then XTR'HIDEHEADER = 1 endif endif LOOP2: xcall XTREE,SROW,SCOL,ANSWERX,TEXT,0,COLDEF,EXITCODE,EROW,ECOL, & XFLAGS,FILE$,MMOCLR,XTRCTL,FILIDX ? TAB(12,1);tab(-1,10); print "TEXT: >";TEXT;"<" print "EXITCODE = ";EXITCODE;" XROW = "; XTR'XROW if EXITCODE=1 then END if (FLAGS and XTF_MSEL) then print "ANSARY: ";ANSWER$[1,150];"..." SELROW = 0 ! scan ANSARY for first selection I = 0 do while I < MAXARY I = I + 1 if ANSARY(I)="1" then SELROW = I exit endif loop ? "First selected row = ";SELROW if SELROW > 0 then ! fetch 1st selected row from file using index... open #CH, FILE$, input xcall MIAMEX,MX_FILEPOS,CH,1,SELROW,FILIDX if SELROW = -1 then print "FILIDX seek error (FILIDX=";FILIDX;", SELROW=";I-1;")" else print "First selected row: "; input line #CH, PLINE print PLINE endif close #CH endif else print "ANSWER: ";ANSWER endif ? tab(8,1);tab(-1,9); ? tab(20,1); STOP ? tab(20,1);tab(-1,10); goto LOOP2