SUB IO.Eepic
' eepic format
PRINT #1, "% Output of qfig.bas in eepic format"
PRINT #1, "% \hspace{"; fnor$(xmax% - xmin%, .25); "mm}"
PRINT #1, "% \vspace{"; fnor$(ymax% - ymin% + 10, .25); "mm}"
PRINT #1, "\unitlength=.25mm"
IF emulation% = 0 AND nocheat% = 0 THEN 'define \shade[]
PRINT #1, "\makeatletter"
PRINT #1, "\def\shade{\@ifnextchar[{\shade@special}{\@killglue\special{sh}\ignorespaces}}"
PRINT #1, "\def\shade@special[#1]{\@killglue\special{sh #1}\ignorespaces}"
PRINT #1, "\makeatother"
END IF
PRINT #1, "\begin{picture}("; fnor$(xmax% - xmin%, 1!); ",";
PRINT #1, fnor$(ymax% - ymin% + 10, 1!); ")(";
PRINT #1, fnor$(xmin%, 1!); ","; fnor$(-5!, 1!); ")"
PRINT #1, "\thinlines"
PRINT #1, "\typeout{\space\space\space eepic-ture exported by 'qfig'.";
IF emulation% = 0 THEN PRINT #1, "}" ELSE PRINT #1, " (emulated)}"
PRINT #1, "\font\FonttenBI=cmbxti10\relax"
PRINT #1, "\font\FonttwlBI=cmbxti10 scaled \magstep1\relax"
FOR i% = 0 TO nobj% - 1
ON fnoo%(i%) GOSUB eepline, eepline, eepline, eepline, eepcirc, eeparc, eepellps, eepbox, eepbox, eepmsgs, eepline
NEXT i%: PRINT #1, "%"
PRINT #1, "\end{picture}": EXIT SUB
' line object
eepline:
PRINT #1, "% object #"; i%;
SELECT CASE fnoo%(i%)
CASE 1, 2
PRINT #1, " (line)"
CASE 3, 4
PRINT #1, " (curve)"
CASE 11
PRINT #1, " (arrow of #"; STR$(obj%(i%, 5)); " at"; STR$(obj%(i%, 6)); ")"
END SELECT
GOSUB eeplinethickness
IF fnoo%(i%) = 11 OR obj%(i%, 5) = 0 THEN
PRINT #1, "\path ";
ELSE
PRINT #1, eepicpattern$(obj%(i%, 5));
END IF
IF fnoo%(i%) = 3 OR fnoo%(i%) = 4 THEN
FOR k% = 0 TO obj%(i%, 1) - 2
x0% = xx(i%, k%): x1% = xx(i%, k% + 1): x2% = xx(i%, k% + 2)
y0% = yy(i%, k%): y1% = yy(i%, k% + 1): y2% = yy(i%, k% + 2)
G.XYparam x0%, y0%, x1%, y1%, x2%, y2%, ax, bx, cx, ay, by, cy
jlast% = interpolcurve% - 1
IF k% = obj%(i%, 1) - 2 THEN jlast% = 2 * interpolcurve%
FOR j% = 0 TO jlast%: t = CSNG(j%) / CSNG(interpolcurve%)
sx = ax * t * t + bx * t + cx: sy = ay * t * t + by * t + cy
PRINT #1, "("; fnor$(sx, 1!); ","; fnor$(ymax% - sy, 1!); ")";
IF j% <> jlast% AND INT((j% + 1) / 5) * 5 = j% + 1 THEN PRINT #1,
NEXT j%: PRINT #1, : NEXT k%
ELSE
FOR j% = 0 TO obj%(i%, 1)
PRINT #1, "("; fnor$(xx(i%, j%), 1!); ","; fnor$(ymax% - yy(i%, j%), 1!); ")";
IF j% <> obj%(i%, 1) AND INT((j% + 1) / 5) * 5 = j% + 1 THEN PRINT #1,
NEXT j%: PRINT #1,
END IF
GOSUB eepobjectdone: RETURN
' circle object
eepcirc: PRINT #1, "% object #"; i%; " (circle)": GOSUB eeplinethickness
PRINT #1, "\put("; fnor$(xx(i%, 0), 1!); ","; fnor$(ymax% - yy(i%, 0), 1!); ")";
PRINT #1, "{\circle{"; fnor$(xx(i%, 2), 2!); "}}"
GOSUB eepobjectdone: RETURN
' arc object
eeparc: PRINT #1, "% object #"; i%; " (arc)": GOSUB eeplinethickness
emu$ = "": IF nocheat% = 0 AND emulation% = 1 THEN emu$ = "%"
rr13 = yy(i%, 4) - yy(i%, 3): IF rr13 < 0! THEN rr13 = 2! * pi + rr13
PRINT #1, emu$; "\put("; fnor$(xx(i%, 1), 1!); ","; fnor$(ymax% - yy(i%, 1), 1!); ")";
PRINT #1, "{\arc{"; fnor$(xx(i%, 3), 2!); "}{"; fnor$(2! * pi - yy(i%, 4), 1!);
PRINT #1, "}{"; fnor$(2! * pi - yy(i%, 4) + rr13, 1!); "}}"
IF nocheat% = 0 AND emulation% = 1 THEN
PRINT #1, "\path"; 'approximation
rad = xx(i%, 3): rr1 = yy(i%, 3): rr3 = yy(i%, 4)
IF rr1 > rr3 THEN rr1 = rr1 - 2! * pi
jj% = INT((rr3 - rr1) / (pi / CSNG(interpolang%))) 'every 5-degrees
FOR j% = 0 TO jj%: t = rr1 + j% * (rr3 - rr1) / jj%
x1 = xx(i%, 1) + rad * COS(t): y1 = yy(i%, 1) - rad * SIN(t)
PRINT #1, "("; fnor$(x1, 1!); ","; fnor$(ymax% - y1, 1!); ")";
IF j% <> jj% AND INT((j% + 1) / 4) * 4 = j% + 1 THEN PRINT #1,
NEXT j%: PRINT #1,
END IF
GOSUB eepobjectdone: RETURN
' ellipse object
eepellps: PRINT #1, "% object #"; i%; " (ellipse)": GOSUB eeplinethickness
IF yy(i%, 2) > 1! THEN
rrty = xx(i%, 2): rrtx = xx(i%, 2) / yy(i%, 2)
ELSE
rrtx = xx(i%, 2): rrty = xx(i%, 2) * yy(i%, 2)
END IF
emu$ = "": IF nocheat% = 0 AND emulation% = 1 THEN emu$ = "%"
PRINT #1, emu$; "\put("; fnor$(xx(i%, 0), 1!); ","; fnor$(ymax% - yy(i%, 0), 1!); ")";
PRINT #1, "{\ellipse{";
IF emulation% = 0 THEN
PRINT #1, fnor$(rrtx, 2!); "}{"; fnor$(rrty, 2!);
ELSE
PRINT #1, fno$(rrtx, 2!); "}{"; fno$(rrty, 2!);
END IF
PRINT #1, "}}"
IF nocheat% = 0 AND emulation% = 1 THEN 'approximation
PRINT #1, "\path";
x1 = xx(i%, 0) + rrtx: y1 = yy(i%, 0)
FOR jj% = 0 TO 2 * interpolang%
t = jj% * pi / CSNG(interpolang%) 'every 5 degrees
x1 = xx(i%, 0) + rrtx * COS(t): y1 = yy(i%, 0) - rrty * SIN(t)
PRINT #1, "("; fnor$(x1, 1!); ","; fno$(ymax% - y1, 1!); ")";
IF jj% <> 2 * interpolang% AND INT((jj% + 1) / 5) * 5 = jj% + 1 THEN PRINT #1,
NEXT jj%: PRINT #1,
END IF
GOSUB eepobjectdone: RETURN
' box object with or w/o filling
eepbox: PRINT #1, "% object #"; i%; " (rectangle)";
IF fnoo%(i%) = 8 THEN PRINT #1, ELSE PRINT #1, " with filling"
GOSUB eeplinethickness
IF fnoo%(i%) = 9 THEN
PRINT #1, "\shade";
IF emulation% = 0 AND nocheat% = 0 THEN PRINT #1, tpicshade$(tpicshade%);
END IF
IF obj%(i%, 5) = 0 THEN
PRINT #1, "\path ";
ELSE
PRINT #1, eepicpattern$(obj%(i%, 5));
END IF
PRINT #1, "("; fnor$(xx(i%, 0), 1!); ","; fnor$(ymax% - yy(i%, 0), 1!); ")";
PRINT #1, "("; fnor$(xx(i%, 0), 1!); ","; fnor$(ymax% - yy(i%, 1), 1!); ")"
PRINT #1, "("; fnor$(xx(i%, 1), 1!); ","; fnor$(ymax% - yy(i%, 1), 1!); ")";
PRINT #1, "("; fnor$(xx(i%, 1), 1!); ","; fnor$(ymax% - yy(i%, 0), 1!); ")";
PRINT #1, "("; fnor$(xx(i%, 0), 1!); ","; fnor$(ymax% - yy(i%, 0), 1!); ")"
'
IF nocheat% = 0 AND fnoo%(i%) = 9 AND obj%(i%, 6) <> 0 THEN
emu$ = "": IF emulation% = 0 THEN emu$ = "%" 'for ecleepic.sty
ji% = 5 - obj%(i%, 6)
ij% = ji% * SGN(yy(i%, 1) - yy(i%, 0))
jj% = INT(ABS(yy(i%, 0) - yy(i%, 1)) / ji% - .4)
jk% = ji% * SGN(xx(i%, 1) - xx(i%, 0)) / 2
IF jj% <= 1 THEN
jj% = 1
ij% = (yy(i%, 1) - yy(i%, 0)) / 2
END IF
PRINT #1, emu$; "\thinlines % substitute for shade pattern"
FOR j% = 1 TO jj%
PRINT #1, emu$; "\dottedline{"; fno$(ji%, 1); "}";
PRINT #1, "("; fnor$(xx(i%, 0) + jk%, 1!); ","; fnor$(ymax% - yy(i%, 0) - j% * ij%, 1!); ")";
PRINT #1, "("; fnor$(xx(i%, 1) - jk%, 1!); ","; fnor$(ymax% - yy(i%, 0) - j% * ij%, 1!); ")"
NEXT j%
END IF
GOSUB eepobjectdone: RETURN
' messages
eepmsgs: PRINT #1, "% object #"; i%; " (string)"
ams$ = "": kanji% = 0: special% = 0: script% = 0
FOR j% = 1 TO obj%(i%, 1)
IF wspec% = 1 THEN
TeX.Characters i%, j%, ams$, kanji%, special%, script%
ELSE
IF yy(i%, j%) = 0! THEN
a$ = CHR$(xx(i%, j%))
ams$ = ams$ + a$
END IF
END IF
NEXT j%
IF script% <> 0 THEN ams$ = ams$ + "}}$"
IF kanji% = 0 THEN
xy% = eheight(obj%(i%, 5)) * obj%(i%, 4) * ptmm / .25
ELSE
xy% = jheight(obj%(i%, 5)) * obj%(i%, 4) * ptmm / .25
END IF
PRINT #1, "\put("; fnor$(xx(i%, 0), 1!); ",";
PRINT #1, fnor$(ymax% - yy(i%, 0) - xy%, 1!); ")";
IF obj%(i%, 6) <> 0 THEN
PRINT #1, "{\makebox(0,0)[cc]{"; chartex$((obj%(i%, 4) - 10) / 2, obj%(i%, 5));
ELSE
PRINT #1, "{{"; chartex$((obj%(i%, 4) - 10) / 2, obj%(i%, 5));
END IF
IF kanji% <> 0 THEN PRINT #1, charjtex$((obj%(i%, 4) - 10) / 2, obj%(i%, 5));
PRINT #1, ams$; "}}"
RETURN
' line thickness / line pattern set
eeplinethickness:
IF fnoo%(i%) = 9 THEN tpicshade% = obj%(i%, 6)
'
IF obj%(i%, 4) = 0 THEN RETURN
IF obj%(i%, 4) = 1 THEN PRINT #1, "\thicklines": RETURN
PRINT #1, "\Thicklines": RETURN
' object save done : it is tedious but ..... OK
eepobjectdone:
IF obj%(i%, 4) = 0 THEN RETURN
PRINT #1, "\thinlines": RETURN
'
END SUB
SUB IO.Export
' PiCTeX format
PRINT #1, "% Output of qfig.bas in PiCTeX format"
PRINT #1, "% \hspace{"; fno$(xmax% - xmin%, .25); "mm}"
PRINT #1, "% \vspace{"; fno$(ymax% - ymin% + 10, .25); "mm}"
PRINT #1, "\mbox{\beginpicture"
PRINT #1, "\setcoordinatesystem units <.25mm,.25mm>"
PRINT #1, "\unitlength=.25mm"
PRINT #1, "\linethickness = .5pt"
PRINT #1, "\setplotsymbol({\fiverm .})"
PRINT #1, "\setplotarea x from "; xmin%; " to "; xmax%; ", y from ";
PRINT #1, "0 to "; ymax% - ymin% + 10 'approx. 7pt is added for spacing
PRINT #1, "\typeout{\space\space\space Picture exported by 'qfig'.}"
PRINT #1, "\font\FonttenBI=cmbxti10\relax"
PRINT #1, "\font\FonttwlBI=cmbxti10 scaled \magstep1\relax"
FOR i% = 0 TO nobj% - 1
ON fnoo%(i%) GOSUB expline, expline, expline, expline, expcirc, exparc, expellps, expbox, expbox, expmsgs, expline
NEXT i%: PRINT #1, "%"
PRINT #1, "\endpicture}": EXIT SUB
' line object
expline:
PRINT #1, "% object #"; i%;
SELECT CASE fnoo%(i%)
CASE 1, 2
PRINT #1, " (line)"
CASE 3, 4
PRINT #1, " (curve)"
CASE 11
PRINT #1, " (arrow of #"; STR$(obj%(i%, 5)); " at"; STR$(obj%(i%, 6)); ")"
END SELECT
GOSUB linethickness
IF fnoo%(i%) = 3 OR fnoo%(i%) = 4 THEN
PRINT #1, "\setquadratic": PRINT #1, "\plot ";
FOR k% = 0 TO obj%(i%, 1) - 2
x0% = xx(i%, k%): x1% = xx(i%, k% + 1): x2% = xx(i%, k% + 2)
y0% = yy(i%, k%): y1% = yy(i%, k% + 1): y2% = yy(i%, k% + 2)
G.XYparam x0%, y0%, x1%, y1%, x2%, y2%, ax, bx, cx, ay, by, cy
jlast% = 4: IF k% = obj%(i%, 1) - 2 THEN jlast% = 10
FOR j% = 0 TO jlast%
t = j% / 5!: sx = ax * t * t + bx * t + cx: sy = ay * t * t + by * t + cy
PRINT #1, sx; ymax% - sy;
IF INT((j% + 1) / 5) * 5 = j% + 1 THEN PRINT #1,
NEXT j%: NEXT k%: PRINT #1, "/"
ELSE
PRINT #1, "\setlinear"
FOR j% = 0 TO obj%(i%, 1) - 1: k% = j% + 1
IF xx(i%, j%) = xx(i%, k%) OR yy(i%, j%) = yy(i%, k%) THEN
PRINT #1, "\putrule from "; xx(i%, j%); ymax% - yy(i%, j%); " to "; xx(i%, k%); ymax% - yy(i%, k%)
ELSE
PRINT #1, "\plot "; xx(i%, j%); ymax% - yy(i%, j%); xx(i%, k%); ymax% - yy(i%, k%); "/"
END IF
NEXT j%
END IF
GOSUB objectdone: RETURN
' circle object
expcirc: PRINT #1, "% object #"; i%; " (circle)": GOSUB linethickness
PRINT #1, "\circulararc 360 degrees from "; xx(i%, 1); ymax% - yy(i%, 1);
PRINT #1, " center at "; xx(i%, 0); ymax% - yy(i%, 0)
GOSUB objectdone: RETURN
' arc object
exparc: PRINT #1, "% object #"; i%; " (arc)": GOSUB linethickness
rr13 = (yy(i%, 4) - yy(i%, 3)) * 180! / pi
IF rr13 < 0! THEN rr13 = 360! + rr13
PRINT #1, "\circulararc "; rr13; " degrees from ";
PRINT #1, xx(i%, 0); ymax% - yy(i%, 0); " center at ";
PRINT #1, xx(i%, 1); ymax% - yy(i%, 1)
GOSUB objectdone: RETURN
' ellipse object
expellps: PRINT #1, "% object #"; i%; " (ellipse)": GOSUB linethickness
IF yy(i%, 2) > 1! THEN
rrtx = 1!: rrty = yy(i%, 2)
ELSE
rrty = 1!: rrtx = 1! / yy(i%, 2)
END IF
PRINT #1, "\ellipticalarc axes ratio "; MID$(STR$(rrtx), 2); ":"; MID$(STR$(rrty), 2);
PRINT #1, " 360 degrees from "; xx(i%, 1); ymax% - yy(i%, 1)
PRINT #1, "center at "; xx(i%, 0); ymax% - yy(i%, 0)
GOSUB objectdone: RETURN
' box object with or w/o filling
expbox: PRINT #1, "% object #"; i%; " (rectangle)";
IF fnoo%(i%) = 8 THEN PRINT #1, ELSE PRINT #1, " with filling"
GOSUB linethickness
IF fnoo%(i%) = 9 THEN
PRINT #1, "\setshadegrid span <"; SQR(2 ^ (3 - obj%(i%, 6))); "pt>"
PRINT #1, "\shaderectangleson"
END IF
PRINT #1, "\putrectangle ";
PRINT #1, "corners at "; xx(i%, 0); ymax% - yy(i%, 0); " and "; xx(i%, 1); ymax% - yy(i%, 1)
IF fnoo%(i%) = 9 THEN PRINT #1, "\shaderectanglesoff"
GOSUB objectdone: RETURN
' messages
expmsgs: PRINT #1, "% object #"; i%; " (string)"
ams$ = "": kanji% = 0: special% = 0: script% = 0
FOR j% = 1 TO obj%(i%, 1)
IF wspec% = 1 THEN
TeX.Characters i%, j%, ams$, kanji%, special%, script%
ELSE
IF yy(i%, j%) = 0! THEN
a$ = CHR$(xx(i%, j%))
ams$ = ams$ + a$
END IF
END IF
NEXT j%
IF script% <> 0 THEN ams$ = ams$ + "}}$"
PRINT #1, "\put{{"; chartex$((obj%(i%, 4) - 10) / 2, obj%(i%, 5));
IF kanji% <> 0 THEN PRINT #1, charjtex$((obj%(i%, 4) - 10) / 2, obj%(i%, 5));
'bbbbbbbbbbbbbbbbbbb
IF kanji% = 0 THEN
xy% = eheight(obj%(i%, 5)) * obj%(i%, 4) * ptmm / .25
ELSE
xy% = jheight(obj%(i%, 5)) * obj%(i%, 4) * ptmm / .25
END IF
IF obj%(i%, 6) <> 0 THEN
PRINT #1, ams$; "}}[cc] at "; xx(i%, 0); ymax% - yy(i%, 0) - xy%
ELSE
PRINT #1, ams$; "}}[lt] at "; xx(i%, 0); ymax% - yy(i%, 0)
END IF
RETURN
' line thickness / line pattern set
linethickness:
IF obj%(i%, 4) = 0 THEN GOTO dashpattern
x1 = obj%(i%, 4): IF x1 = 0 THEN x1 = .5
PRINT #1, "\linethickness ="; x1; "pt"
IF fnoo%(i%) = 8 OR fnoo%(i%) = 9 THEN GOTO dashpattern
' plotsymbol stolen from "xfig" on UNIX
PRINT #1, "\setplotsymbol({\makebox(0,0)[l]{\tencirc\symbol{'16";
PRINT #1, RIGHT$(STR$(obj%(i%, 4) - 1), 1); "}}})"
dashpattern:
IF obj%(i%, 5) = 0 OR fnoo%(i%) = 11 THEN RETURN
PRINT #1, "\setdashpattern < "; dpattern$(obj%(i%, 5)); " >"
RETURN
' object save done : it is tedious but ..... OK
objectdone:
IF obj%(i%, 4) = 0 THEN GOTO objectdone1
PRINT #1, "\linethickness = .5pt"
PRINT #1, "\setplotsymbol({\fiverm .})"
objectdone1:
IF obj%(i%, 5) <> 0 AND fnoo%(i%) <> 11 THEN PRINT #1, "\setsolid"
RETURN
'
END SUB
SUB IO.File
' file operation
STATIC nfilenoext$
'
KeySwitch 0
KEY(17) OFF: KEY(19) OFF
CursorDisplay px%, py%: SCREEN scrtype%
CLS 0
SCREEN scrtype%
COLOR 7
PRINT "File Operations: Select one or [ESC] to quit": PRINT
FOR i% = 1 TO UBOUND(iomessages$)
PRINT TAB(20); fno$(i%, 1); ". "; iomessages$(i%): NEXT i%
'
ifile% = 1: jfile% = 1
rowold% = row%: colold% = col%
savepx% = px%: savepy% = py%: savepxold% = pxold%: savepyold% = pyold%
px% = pxo% + windowx%(wndwfctr%) / 2: py% = pyo% + windowy%(wndwfctr%) / 2
col% = px%: row% = py%: rowrow% = row%
'IF mouswitch% THEN MouseLocate py%, px% '<=== when Mouse is used
'
LOCATE 3, 19: COLOR 3: PRINT " 1.";
COLOR 3: PRINT " "; iomessages$(1); : COLOR 7
DO: a$ = KeyIsTouched$
IF jfile% <> ifile% THEN
LOCATE 2 + jfile%, 19: PRINT " "; fno$(jfile%, 1); ". "; iomessages$(jfile%);
LOCATE 2 + ifile%, 19: COLOR 3: PRINT " "; fno$(ifile%, 1); ".";
COLOR 3: PRINT " "; iomessages$(ifile%); : COLOR 7: jfile% = ifile%
END IF
SELECT CASE a$
CASE CHR$(&H0) + CHR$(UP)
IF ifile% > 1 THEN ifile% = ifile% - 1 ELSE ifile% = UBOUND(iomessages$)
CASE CHR$(&H0) + CHR$(DOWN)
IF ifile% < UBOUND(iomessages$) THEN ifile% = ifile% + 1 ELSE ifile% = 1
CASE CHR$(SP)
EXIT DO
CASE CHR$(CR)
EXIT DO
CASE IS >= CHR$(&H31)
IF a$ <= CHR$(&H37) THEN
ifile% = VAL(a$)
LOCATE 2 + jfile%, 19: PRINT " "; fno$(jfile%, 1); ". "; iomessages$(jfile%);
LOCATE 2 + ifile%, 19: COLOR 11: PRINT " "; fno$(ifile%, 1); ".";
COLOR 3: PRINT " "; iomessages$(ifile%);
COLOR 7: EXIT DO
END IF
CASE CHR$(&H1B)
GOTO filedone
CASE ""
IF mouswitch% THEN
' MousePoll row%, col%, lbut%, rbut% '<=== when Mouse is used
IF lbut% <> 0 OR rbut% <> 0 THEN
EXIT DO
END IF
IF ABS(row% - rowrow%) > 4 THEN
IF row% > rowrow% THEN
IF ifile% < UBOUND(iomessages$) THEN ifile% = ifile% + 1 ELSE ifile% = 1
END IF
IF row% < rowrow% THEN
IF ifile% > 1 THEN ifile% = ifile% - 1 ELSE ifile% = UBOUND(iomessages$)
END IF
rowrow% = row%
END IF
END IF
END SELECT
LOOP
'
LOCATE 4 + UBOUND(iomessages$), 1
'
SELECT CASE ifile%
CASE 1 TO 3
shlcmd$ = "dir *.qfg /w"
CASE 4 TO 6 'ELSE
shlcmd$ = "dir *.tex /w"
CASE 7
QUIT0
EXIT SUB
END SELECT
'
displaydirectory:
SHELL shlcmd$
PRINT : PRINT "Enter the file name : "; : Chr.Input nfilenoext$
nfile$ = nfilenoext$
IF nfile$ = "" THEN nfile$ = "$$gifq$$"
i% = INSTR(nfile$, ":")
pfile$ = LEFT$(nfile$, i%): nfile$ = MID$(nfile$, i% + 1)
DO UNTIL INSTR(nfile$, "\") = 0
i% = INSTR(nfile$, "\")
pfile$ = pfile$ + LEFT$(nfile$, i%)
nfile$ = MID$(nfile$, i% + 1)
LOOP
i% = INSTR(nfile$, ".")
IF i% <> 0 THEN
nfilenoext$ = LEFT$(LEFT$(nfile$, i% - 1), 8)
nfile$ = nfilenoext$ + LEFT$(MID$(nfile$, i%), 4)
IF ifile% >= 4 THEN nfile1$ = nfilenoext$: nfile1$ = nfile1$ + ".tex"
ELSE
nfilenoext$ = LEFT$(nfile$, 8): nfile$ = nfilenoext$
nfile1$ = nfile$
IF ifile% >= 3 THEN nfile$ = nfile$ + ".qfg"
IF ifile% >= 4 THEN nfile1$ = nfile1$ + ".tex"
END IF
'
nfilenoext$ = pfile$ + nfilenoext$: nfile$ = pfile$ + nfile$
IF INSTR(nfile$, "*") <> 0 THEN
shlcmd$ = "dir /w " + nfile$
nfilenoext$ = nfile$
GOTO displaydirectory
END IF
'
both% = 1
notexist% = 0: OPEN nfile$ FOR RANDOM AS #1 ' check the existence
IF LOF(1) = 0 THEN notexist% = 1: both% = 0 ' non-existent
CLOSE : IF notexist% = 1 THEN KILL nfile$
IF ifile% > 3 THEN
OPEN nfile1$ FOR RANDOM AS #1 ' check the existence
IF LOF(1) <> 0 THEN notexist% = 0: both% = both% + 2 ' existent
CLOSE : IF both% < 2 THEN KILL nfile1$
END IF
IF notexist% = 0 AND ifile% < 3 THEN
OPEN nfile$ FOR INPUT AS #1
IO.Load ifile%: CLOSE
ELSEIF ifile% > 2 THEN
IF notexist% = 0 THEN
PRINT : PRINT : PRINT TAB(10); "The file(s) '"; : COLOR 14
SELECT CASE both%
CASE 1
PRINT nfile$; : COLOR 7: PRINT "' already exists.": PRINT
CASE 2
PRINT nfile1$; : COLOR 7: PRINT "' already exists.": PRINT
CASE 3
PRINT nfile$; " & "; nfile1$; : COLOR 7: PRINT "' already exist.": PRINT
END SELECT
PRINT TAB(25); " ..... Do you want to overwrite (y/n)? ";
DO: res$ = INKEY$
LOOP UNTIL UCASE$(res$) = "Y" OR UCASE$(res$) = "N"
IF UCASE$(res$) = "N" THEN GOTO filedone
END IF
IF ifile% = 3 THEN
OPEN nfile$ FOR OUTPUT AS #1
IO.Save 3: CLOSE
ELSEIF ifile% >= 4 THEN
OPEN nfile$ FOR OUTPUT AS #1
IO.Save 3: CLOSE
OPEN nfile1$ FOR OUTPUT AS #1
IO.Save ifile%: CLOSE
END IF
END IF
filedone:
row% = rowold%: col% = colold%
px% = savepx%: py% = savepy%: pxold% = savepxold%: pyold% = savepyold%
KeySwitch 1
SCREEN scrtype%: CL.R.edraw 0, 0: CursorDisplay px%, py%
KeyDisplay
KEY(17) ON: KEY(19) ON
'
END SUB
SUB IO.Load (ifile%)
' load data
IF nobj% <> 0 THEN
PRINT : PRINT CHR$(7); "Are you sure you don't want to save"
PRINT "current file...(y/n)"
DO: aaa$ = INKEY$: LOOP UNTIL (aaa$ <> "" AND INSTR("yYnN", aaa$))
IF (aaa$ = "n") OR (aaa$ = "N") THEN EXIT SUB
END IF
nobjstart% = 0: IF ifile% = 2 THEN nobjstart% = nobj%
INPUT #1, aaa$
IF aaa$ <> FILE.CHECK$ THEN
PRINT : PRINT CHR$(7); "This is not a QFIG file."
PRINT "hit any key...": CLOSE
DO: aaa$ = INKEY$: LOOP UNTIL aaa$ <> ""
ELSE
nobj% = nobjstart%
CLS 0
IF ifile% = 2 THEN
INPUT #1, i%, j%, k%, L%
' CLS 0
ELSE
INPUT #1, xmin%, xmax%, ymin%, ymax%
END IF
LOCATE 12, 30: COLOR 10: PRINT msgload$; : COLOR 7
SLEEP 1
DO UNTIL EOF(1)
INPUT #1, obj%(nobj%, 0), obj%(nobj%, 1), obj%(nobj%, 2), obj%(nobj%, 3), obj%(nobj%, 4), obj%(nobj%, 5), obj%(nobj%, 6)
IF obj%(nobj%, 0) = 11 THEN obj%(nobj%, 5) = obj%(nobj%, 5) + nobjstart%
'check to see if loaded string is boxtext.
IF obj%(nobj%, 0) = 10 THEN
IF obj%(nobj%, 6) <> 0 THEN
obj%(nobj%, 6) = obj%(nobj%, 6) + nobjstart%
END IF
END IF
FOR i% = 0 TO obj%(nobj%, 1)
INPUT #1, xx(nobj%, i%), yy(nobj%, i%): NEXT i%
nobj% = nobj% + 1
LOOP
END IF
'
END SUB
SUB IO.Save (ifile%)
' save data
IF wrong% <> 1 THEN
CL.R.edraw -1, 1
CursorDisplay px%, py%
END IF
CLS 0
LOCATE 12, 30: COLOR 10: PRINT msgsave$; : COLOR 7
SELECT CASE ifile%
CASE 3
' simple format
PRINT #1, FILE.CHECK$
PRINT #1, xmin%; xmax%; ymin%; ymax%
FOR i% = 0 TO nobj% - 1
PRINT #1, fnoo%(i%); obj%(i%, 1); obj%(i%, 2); obj%(i%, 3); obj%(i%, 4); obj%(i%, 5); obj%(i%, 6)
FOR j% = 0 TO obj%(i%, 1): PRINT #1, xx(i%, j%); yy(i%, j%): NEXT j%
NEXT i%
CASE 4
IO.Export
CASE 5
emulation% = 0
IO.Eepic
CASE 6
emulation% = 1
IO.Eepic
END SELECT
'
END SUB
SUB TeX.Characters (i%, j%, ams$, kanji%, special%, script%)
' output TeX Special Characters
kanji% = kanji% + INT(yy(i%, j%))
IF yy(i%, j%) = 0! THEN
a$ = CHR$(xx(i%, j%))
IF special% = 0 AND a$ = "\" THEN special% = 1: EXIT SUB
IF INSTR("^\@_", a$) <> 0 THEN
IF special% = 0 AND INSTR("^@_", a$) <> 0 THEN
SELECT CASE a$
CASE "@"
IF script% = 0 THEN EXIT SUB
a$ = "}}$"
script% = 0
CASE ELSE
IF a$ = "^" AND script% = 1 THEN EXIT SUB
IF a$ = "_" AND script% = 2 THEN EXIT SUB
IF a$ = "^" THEN script% = 1 ELSE script% = 2
a$ = "$" + a$ + "{\mbox{"
IF obj%(i%, 4) = 10 THEN a$ = a$ + "\viipt " ELSE a$ = a$ + "\viiipt "
END SELECT
ELSE
special% = 0
IF a$ = "^" THEN
a$ = "{\tt\symbol{'136}}"
ELSEIF a$ = "\" THEN
a$ = "{\tt\symbol{'134}}"
ELSEIF a$ = "_" THEN
a$ = "\_"
END IF
END IF
ELSE
IF special% = 1 THEN special% = 0
IF INSTR("#$%&{}", a$) <> 0 THEN
a$ = "\" + a$
ELSEIF INSTR("<>-|", a$) <> 0 THEN
a$ = "$" + a$ + "$"
ELSEIF a$ = "~" THEN
a$ = "{\tt\symbol{'176}}"
END IF
END IF
IF ASC(a$) < &H20 OR ASC(a$) > &H7E THEN a$ = " "
ams$ = ams$ + a$
ELSE
ams$ = ams$ + STRING$(1, VAL("&j" + HEX$(yy(i%, j%)) + HEX$(xx(i%, j%))))
END IF
'
END SUB