SUB HDDSET(field$(), command$, title$, workfile$, outfile$, err$) ! ! set up the input parameters and data lines, ! one line at a time. Line data is passed in field$() ! {BL:[101,5]TRUTH.B4S} {BL:[101,5]FCSERRCOM.B4S} ! {HDDDEF.B4S} ! {HDDMAP.B4S} ! ! print "at A" IF field$(1%) = "START" & THEN in.put%, first% = .true% & \ IF field$(2%) = "NODES" & THEN node.inp% = .true% & ELSE IF field$(2%) = "PIPES" & THEN pipe.inp% = .true% & ELSE IF field$(2%) = "LOOPS" & THEN loop.inp% = .true% & ELSE IF field$(2%) = "LINES" & THEN line.inp% = .true% ! print "SET - line.inp% ";line.inp% ! IF NOT (in.put%) & THEN do% = fn.workfile% IF field$(1%) = "WORKFILE" & \ do% = fn.outfile% IF field$(1%) = "OUTFILE" & \ do% = fn.heads% IF field$(1%) = "HEADS" & \ do% = fn.flows% IF field$(1%) = "FLOWS" & \ do% = fn.loopdata% IF field$(1%) = "DATAFILE" & \ do% = fn.title% IF field$(1%) = "TITLE" & \ do% = fn.results% IF field$(1%) = "RESULTS" & \ pipe.coeff = val(field$(2%)) IF field$(1%) = "COEFFICIENT" & \ IF field$(1%) = "CLOSE" & THEN pi.pe% = val(field$(2%)) & \ do% = fn.close%(pi.pe%) & ELSE IF field$(1%) = "OPEN" & THEN pi.pe% = val(field$(2%)) & \ do% = fn.open%(pi.pe%) ! IF NOT (in.put%) & THEN debug% = val(field$(2%)) IF field$(1%) = "DEBUG" & \ debug1% = val(field$(2%)) IF field$(1%) = "DEBUG1" & \ debug2% = val(field$(2%)) IF field$(1%) = "DEBUG2" & \ help% = .true% IF field$(1%) = "HELP" OR field$(1%) = "?" & \ more.data% = .false% IF field$(1%)="DO" OR field$(1%)="GO" OR field$(1%)="QUIT" OR field$(1%) = "EXIT" & \ not.finished% = .false% IF field$(1%) = "QUIT" OR field$(1%) = "EXIT" & \ IF field$(1%) = "ECHO" & THEN IF field$(2%) = "" OR field$(2%) = "-1" & THEN echo% = .true% & ELSE echo% = .false% ! IF in.put% & THEN IF field$(1%) = "END" & THEN in.put% = .false% & \ IF field$(2%) = "NODES" & THEN node.inp% = .false% & ELSE IF field$(2%) = "PIPES" & THEN pipe.inp% = .false% & ELSE IF field$(2%) = "LOOPS" & THEN loop.inp% = .false% & ELSE IF field$(2%) = "LINES" & THEN line.inp% = .false% ! IF (in.put% AND first% AND line.inp%) & THEN CALL CLOSE.(.pipe.chan%) & \ CALL CLOSE.(.loop.chan%) & \ do% = fn.open.workfile%(".P", "U", .pipe.chan%, .pipe.buf.siz%) & \ do% = fn.open.workfile%(".L", "U", .loop.chan%, .loop.buf.siz%) ! ! print "input, first, line.inp: "; in.put%; first%; line.inp% ! IF in.put% & THEN IF first% & THEN first% = .false% & ELSE IF node.inp% & THEN do% = fn.node.inp% & ELSE IF pipe.inp% & THEN do% = fn.pipe.inp% & ELSE IF loop.inp% & THEN do% = fn.loop.inp% & ELSE IF line.inp% & THEN do% = fn.writeback% ! ! print "end of ITEs in.put, first "; in.put%, first% ! ! print "at C" IF echo% & THEN command$ = CR + LF + command$ & \ print command$ ! SUBEXIT ! ! ***************** FUNCTIONS ************************** ! ! ***************** fn.workfile$() ************************** ! DEF fn.workfile% ! workfile$ = field$(2%) ! workfile$ = edit$(workfile$, 40%) psn.dot% = pos(workfile$, ".", 1%) workfile$ = left$(workfile$, psn.dot% - 1%) IF psn.dot% > 0% ! IF field$(3%) = "NEW" & THEN do% = fn.open.workfile%(".N", "W", .node.chan%, .node.buf.siz%) & \ do% = fn.open.workfile%(".P", "W", .pipe.chan%, .pipe.buf.siz%) & \ do% = fn.open.workfile%(".L", "W", .loop.chan%, .loop.buf.siz%) & \ node.file.open%, pipe.file.open%, loop.file.open% = .true% & ELSE new.workfiles% = .false% ! FNEND ! ! ***************** fn.outfile$() ************************** ! DEF fn.outfile% ! outfile$ = field$(2%) ! outfile$ = edit$(outfile$, 40%) psn.dot% = pos(outfile$, ".", 1%) outfile$ = left$(outfile$, psn.dot% - 1%) IF psn.dot% > 0% ! FNEND ! ! ***************** fn.title%() ************************** ! DEF fn.title% ! title$ = edit$(right$(command$, 6%), 8%) + CR + LF + HT + "[HDD: " + time$(0%) + " " + date$(0%) + "]" ! FNEND ! ! *************** fn.flows%() ************************ ! DEF fn.flows% ! IF field$(2%) <> "" & THEN flows% = val(field$(2%)) & ELSE flows% = .true% ! FNEND ! ! *************** fn.heads%() ************************ ! DEF fn.heads% ! IF field$(2%) <> "" & THEN heads% = val(field$(2%)) & ELSE heads% = .true% ! FNEND ! ! *************** fn.loopdata%() ************************ ! DEF fn.loopdata% ! IF field$(2%) <> "" & THEN loopdata% = val(field$(2%)) & ELSE loopdata% = .true% ! FNEND ! ! *************** fn.results%() ************************ ! DEF fn.results% ! IF field$(2%) <> "" & THEN results% = val(field$(2%)) & ELSE results% = .true% ! FNEND ! ! ************* fn.node.inp% ******************** ! DEF fn.node.inp% ! IF NOT (node.file.open%) & THEN do% = fn.open.workfile%(".N", "W", .node.chan%, .node.buf.siz%) & \ node.file.open% = .true% ! rec% = val(field$(1%)) n%(0%) = val(field$(2%)) n%(1%) = val(field$(3%)) n%(2%) = val(field$(4%)) n%(3%) = val(field$(5%)) nodeflow = val(field$(6%)) xnode = val(field$(7%)) ynode = val(field$(8%)) elevation = val(field$(9%)) resid.head = val(field$(10%)) procflag% = 0% ! CALL PUT.(.node.chan%, node$, rec%) ! FNEND ! ! ************* fn.pipe.inp% ******************** ! DEF fn.pipe.inp% ! IF NOT (pipe.file.open%) & THEN do% = fn.open.workfile%(".P", "W", .pipe.chan%, .pipe.buf.siz%) & \ pipe.file.open% = .true% ! rec% = val(field$(1%)) node1% = val(field$(2%)) node2% = val(field$(3%)) diam = val(field$(4%)) length = val(field$(5%)) pipeflow = val(field$(6%)) ! CALL PUT.(.pipe.chan%, pipe$, rec%) ! print "fn.pipe.inp - rec%, err1%, node1%: "; rec%, err1%, node1%, node2% ! FNEND ! ! ************* fn.loop.inp% ******************** ! DEF fn.loop.inp% ! IF NOT (loop.file.open%) & THEN do% = fn.open.workfile%(".L", "W", .loop.chan%, .loop.buf.siz%) & \ loop.file.open% = .true% ! loop% = val(field$(1%)) l.node%(i%) = val(field$(i% + 2%)) FOR i% = 0% TO (.max.nodes% - 1%) ! CALL PUT.(.loop.chan%, loop$, loop%) ! FNEND ! ! **************** fn.writeback%() ************** ! DEF fn.writeback% ! new.workfiles% = .false% IF NOT (pipe.file.open%) & THEN do% = fn.open.workfile%(".P", "U", .pipe.chan%, .pipe.buf.siz%) & \ pipe.file.open% = .true% ! IF NOT (loop.file.open%) & THEN do% = fn.open.workfile%(".L", "U", .loop.chan%, .loop.buf.siz%) & \ pipe.file.open% = .true% ! err.msg$ = "" ! print "in fn.writeback" CALL HDDWRB(field$(), err.msg$) ! FNEND ! ! ************* fn.open.workfile%() ************* ! DEF fn.open.workfile%(ext$, mode$, chan%, reclen%) ! IF workfile$ = "" & THEN workfile$ = "HDXDAT" ! CALL OPEN.(workfile$ + ext$, mode$, chan%, reclen%) ! FNEND ! ! ************** fn.open%(pipe%) ********************* ! DEF fn.open%(pipe%) ! CALL GET.(.pipe.chan%, pipe$, pipe%) do% = fn.valve%(node1%, node2%, 1%) do% = fn.valve%(node2%, node1%, 1%) ! FNEND ! ! ************** fn.close%(pipe%) ********************* ! DEF fn.close%(pipe%) ! CALL GET.(.pipe.chan%, pipe$, pipe%) do% = fn.valve%(node1%, node2%, -1%) do% = fn.valve%(node2%, node1%, -1%) ! FNEND ! ! ************** fn.valve%() ********************* ! DEF fn.valve%(firstnode%, secondnode%, mode%) ! ! close or open the link firstnode->secondnode ! mode: .open% (or) .close% ! CALL GET.(.node.chan%, node$, firstnode%) ! FOR i2% = 0% to 3% IF ABS(n%(i2%)) = secondnode% & THEN n%(i2%) = -(n%(i2%)) IF sgn(n%(i2%)) <> mode% & ! NEXT i2% ! CALL PUT.(.node.chan%, node$, firstnode%) ! FNEND ! ! {BL:[101,5]FNSAW.B4S} {BL:[101,5]FNANSCHK.B4S} ! SUBEND