Programm ´Plotgrid´ ================= Manchmal möchte man alte Plotter wieder in Betrieb nehmen. Dann braucht man auch Beschriftungen. Aus Nostalgie-Gründen habe ich zwei rudimentäre Programme gebaut. Das erste heißt Plotgrid und erlaubt es, per Maus in einem 5x7-Zeichengitter mittels Liniensegmenten eigene Zeichen zu definieren, und den entstehenden Punktcode in der Zwischenablage abzulegen. Das Ergebnis kann man dann im zweiten Programm "ABC-Plot" beim entsprechenden Zeichencode einbauen und damit eigene Symbole, Zeichen und Buchstaben plotten.
Bedienung: Der 1. Mausklick wird erfasst, aber noch keine Linie sichtbar. Ab dem 2. Mausklick wird zur gerasterten Mausposition eine (im Beispiel rote) Linie geplottet. Jeder weitere Mausklick zeichnet ein weiteres Liniensegment. Will man den Linienzug unterbrechen und woanders neu ansetzen: Rechte Maustaste. Dann geht´s wie beim 1. Mausklick weiter. Fehlerhafte Zeichen löschen und neu beginnen geschieht mit der ESC-Taste. Durch Programmwechsel kann man den in der Zwischenablage stehenden Code dann in das ABC-Plot-Programm weiter unten einbauen.
WindowTitle "Plotgrid"
WindowStyle 24
Window 0,0-%maxx,%maxy
var xr&=width(%hwnd)/16
var yr&=height(%hwnd)/9
var lastx&=0:var lasty&=0
var drw&=0
var mou&=0
clearclip
rept:
cls
font 2
drw&=0
locate 2,2
usepen 0,1,0
whileloop 1,5
line xr&*&Loop,yr& - xr&*&Loop,yr&*7
endwhile
whileloop 1,7
line xr&,yr&*&Loop - xr&*5,yr&*&Loop
endwhile
repeat
waitinput 333
mou&=%mousekey
if mou&=1
lastx&=int(%mousex/xr&+.5):lasty&=int(%mousey/yr&+.5)
print lastx&;lasty&;" ";
putclip str$(lastx&)+str$(lasty&)
usepen 0,5,rgb(255,0,0)
if drw&=1
lineto xr&*int(%mousex/xr&+.5),yr&*int(%mousey/yr& +.5)
else
moveto xr&*int(%mousex/xr&+.5),yr&*int(%mousey/yr& +.5)
drw&=1
endif
elseif mou&=2
locate %csrlin,%pos-1
print "|";
putclip " "
drw&=0
endif
until %key=27
clearclip
goto "rept"
Programm ABC-PLOT (Early beta-Version) dazu:
Ein Zeichen-Plotprogramm quasi "zu Fuß" zu programmieren, und dabei nicht auf Windows-Schriften zurückzugreifen, ist gar nicht so einfach. Sonderzeichen müssen z.B. ausgefiltert werden, Verbundzeichen wie (C) oder (R) müssen erkannt und ersetzt werden etc. etc. Ein erster Versuch, noch ohne Farb- oder Größenänderungen und einem bloß rudimentären Zeichensatz, steht hier für eigene Experimente zur Verfügung. Weiterentwicklungen sind willkommen.
Schirm löschen geschieht durch Eingabe von CLS. Weitere solche Sonderfunktionen wären wünschenswert.
WindowTitle "ABC-PLOT"
'(CL) Copyleft 2019-11 by P.Specht, Vienna/EU
WindowStyle 24:Window 0,0-%maxx,%maxy-40:font 2
Goto "INIT"
BACK:
' Plotinfo-Integrität testen:
pl$[]=explode(plt$,"\n")
case sizeof(pl$[])<>256:print "Fehler: Zeichenzahl <> 256"
whileloop 0,255
if left$(pl$[&Loop],1)<>chr$(&loop)
print "Fehler bei Zeichen ";&Loop,pl$[&Loop]
waitinput
endif
endwhile
GOTO "WEITER"
'<<<
INIT:
Declare plt$,pl$[]
plt$=chr$(0)+":\n"+chr$(1)+":\n"+chr$(2)+":\n"+chr$(3)+":\n"+chr$(4)+":\n"+\
chr$(5)+":\n"+chr$(6)+":\n"+chr$(7)+":\n"+chr$(8)+":\n"+chr$(9)+":\n"+\
chr$(10)+":\n"+chr$(11)+":\n"+chr$(12)+":\n"+chr$(13)+":\n"+chr$(14)+":\n"+\
chr$(15)+":\n"+chr$(16)+":\n"+chr$(17)+":\n"+chr$(18)+":\n"+chr$(19)+":\n"+\
chr$(20)+":\n"+chr$(21)+":\n"+chr$(22)+":\n"+chr$(23)+":\n"+chr$(24)+":\n"+\
chr$(25)+":\n"+chr$(26)+":\n"+chr$(27)+":\n"+chr$(28)+":\n"+chr$(29)+":\n"+\
chr$(30)+":\n"+chr$(31)+":\n"+\
" :\n"+\
"!:363747463647 3746 454131354531 4135\n"+\
chr$(34)+":21221221 41423241\n"+\
"#:3235 4245 2353 2454\n"+\
"$:53423223344455463625 3137 4741\n"+\
"%:5117 1131331311 3537575535\n"+\
"&:56242232434453 4434252637475655\n"+\
"':31413231\n"+\
"(:4131243747\n"+\
"):2131443727\n"+\
"*:5612 1652 1454 3236\n"+\
"+:3236 1454\n"+\
",:34444537273634453637 3545 4435\n"+\
"-:2454\n"+\
".:363747463647 4637\n"+\
"/:5117\n"+\
"0:22314152564737262256\n"+\
"1:224147 3757\n"+\
"2:22314152534434252757\n"+\
"3:2231415253445556473726\n"+\
"4:412555 4447\n"+\
"5:512124334354564727\n"+\
"6:5241312226374756553324\n"+\
"7:22215127 3444\n"+\
"8:34445352413122233425263747565544\n"+\
"9:263747565241312223344453\n"+\
chr$(58)+":463635454635 3645 443433434433 3443\n"+\
";:344443333443 3344 454637273635453637 364635\n"+\
"<:421446\n"+\
"=:5323 2555\n"+\
">:124416\n"+\
"?:232231415253443435 36374736\n"+\
"@:5647271612214152544535242332424435\n"+\
"A:171221415257 5414\n"+\
"B:17114152534414 4455564717\n"+\
"C:5647271612214152\n"+\
"D:17114152564717\n"+\
"E:57171151 1444\n"+\
"F:171151 1444\n"+\
"G:52412112162747565434\n"+\
"H:1711 5157 5414\n"+\
"I:2141 3137 2747\n"+\
"J:1527475551\n"+\
"K:1117 5115 3357\n"+\
"L:111757\n"+\
"M:1711355157\n"+\
"N:17115751\n"+\
"O:161221415256472716\n"+\
"P:17114152534414\n"+\
"Q:3557 564727161221415256\n"+\
"R:17114152534414 3457\n"+\
"S:524121121324445556472716\n"+\
"T:1151 3137\n"+\
"U:111627475651\n"+\
"V:113751\n"+\
"W:1117345751\n"+\
"X:1157 5117\n"+\
"Y:113451 3437\n"+\
"Z:11511757 2444\n"+\
"[:41212747\n"+\
"\:1157\n"+\
"]:21414727\n"+\
"^:233143\n"+\
"_:1858\n"+\
"':31433331\n"+\
"a:171221415257 5414\n"+\
"b:17114152534414 4455564717\n"+\
"c:5647271612214152\n"+\
"d:17114152564717\n"+\
"e:57171151 1444\n"+\
"f:171151 1444\n"+\
"g:52412112162747565434\n"+\
"h:1711 5157 5414\n"+\
"i:2141 3137 2747\n"+\
"j:1527475551\n"+\
"k:1117 5115 3357\n"+\
"l:111757\n"+\
"m:1711355157\n"+\
"n:17115751\n"+\
"o:161221415256472716\n"+\
"p:17114152534414\n"+\
"q:3557 564727161221415256\n"+\
"r:17114152534414 3457\n"+\
"s:524121121324445556472716\n"+\
"t:1151 3137\n"+\
"u:111627475651\n"+\
"v:113751\n"+\
"w:1117345751\n"+\
"x:1157 5117\n"+\
"y:113451 3437\n"+\
"z:11511757 2444\n"+\
"{:514132332435364757\n"+\
"|:3137\n"+\
"}:172736354433322111\n"+\
"~:1423334453 1524354554\n"+\
":\n"+\
"€:5241312226374756 4313 1444\n"+\
":\n"+\
"‚:\n"+\
"ƒ:\n"+\
"„:\n"+\
"…:\n"+\
":\n"+\
" :\n"+\
"ˆ:\n"+\
"‰:\n"+\
":\n"+\
"‹:\n"+\
"Œ:\n"+\
" :\n"+\
"Ž:\n"+\
" :\n"+\
" :\n"+\
"‘:\n"+\
"’:\n"+\
"“:\n"+\
"”:\n"+\
"•:\n"+\
"–:\n"+\
"—:\n"+\
"˜:\n"+\
"™:\n"+\
" :\n"+\
"›:\n"+\
"œ:\n"+\
" :\n"+\
"ž:\n"+\
"Ÿ:\n"+\
" :\n"+\
" :\n"+\
"¢:\n"+\
"£:\n"+\
"¤:\n"+\
"¥:\n"+\
"¦:3137\n"+\
"§:5241312233435445352433 4556473726\n"+\
chr$(168)+":21221221 41423241\n"+\
"©:312112153747565231 433223253645\n"+\
"ª:\n"+\
"«:\n"+\
"¬:\n"+\
":\n"+\
"®:262232433424 3446 564727151221415356\n"+\
"¯:\n"+\
"°:4121234341\n"+\
"±:2224 1333 5117 3555\n"+\
"²:\n"+\
"³:\n"+\
"´:41334341\n"+\
"µ:271612 1526364442 4446\n"+\
"¶:\n"+\
"·:\n"+\
"¸:\n"+\
"¹:\n"+\
"º:\n"+\
"»:\n"+\
"¼:\n"+\
"½:\n"+\
"¾:\n"+\
"¿:\n"+\
"À:\n"+\
"Á:\n"+\
"Â:\n"+\
"Ã:\n"+\
"Ä:1713315357 5515 12211112 41525141\n"+\
"Å:\n"+\
"Æ:\n"+\
"Ç:\n"+\
"È:\n"+\
"É:\n"+\
"Ê:\n"+\
"Ë:\n"+\
"Ì:\n"+\
"Í:\n"+\
"Î:\n"+\
"Ï:\n"+\
"Ð:\n"+\
"Ñ:\n"+\
"Ò:\n"+\
"Ó:\n"+\
"Ô:\n"+\
"Õ:\n"+\
"Ö:21111221 41525141 224253564727161322\n"+\
"×:\n"+\
"Ø:\n"+\
"Ù:\n"+\
"Ú:\n"+\
"Û:\n"+\
"Ü:515647271611 21223221 31424131\n"+\
"Ý:\n"+\
"Þ:\n"+\
"ß:171221415243545647\n"+\
":\n"+\
" :\n"+\
"â:\n"+\
"ã:\n"+\
"ä:1713315357 5515 12211112 41525141\n"+\
"å:\n"+\
"æ:\n"+\
"ç:\n"+\
"è:\n"+\
"é:\n"+\
"ê:\n"+\
"ë:\n"+\
"ì:\n"+\
"í:\n"+\
"î:\n"+\
"ï:\n"+\
"ð:\n"+\
"ñ:\n"+\
"ò:\n"+\
"ó:\n"+\
"ô:\n"+\
"õ:\n"+\
"ö:21111221 41525141 224253564727161322\n"+\
"÷:\n"+\
"ø:\n"+\
"ù:\n"+\
"ú:\n"+\
"û:\n"+\
"ü:515647271611 21223221 31424131\n"+\
"ý:\n"+\
"þ:\n"+\
"ÿ:1117575111"
GOTO "BACK"'<< Zeile 256 für Zl-Nr. = ASCII
WEITER:
Declare s$,z$,o&,tmp$,both$,xx&,yy&,drw&,dd&
CLS:xx&=20:yy&=50'Default-Startpixel des Textes
NOCHMAL:
locate 2,1:Print " Zu plottender Text: "+\
" "
locate 2,22:input s$
case instr("(C)",s$):s$=left$(s$,instr("(C)",s$)-1)+chr$(169)+mid$(s$,instr("(C)",s$)+3,len(s$)-2-instr("(C)",s$))
case instr("(R)",s$):s$=left$(s$,instr("(R)",s$)-1)+chr$(174)+mid$(s$,instr("(R)",s$)+3,len(s$)-2-instr("(R)",s$))
case instr("+/-",s$):s$=left$(s$,instr("+/-",s$)-1)+chr$(177)+mid$(s$,instr("+/-",s$)+3,len(s$)-2-instr("+/-",s$))
:if s$="cls":cls:xx&=20:yy&=50:goto "NOCHMAL":endif
drw&=0'Stift abheben
xx&=20'CR
yy&=yy&+2*15'LF
dd&=1'Plotterstiftdicke
':::CLS
':::locate 10,1
Whileloop len(s$)
z$=mid$(s$,&Loop,1)
o&=ord(z$)
tmp$=pl$[o&]
both$=left$(tmp$,2)
'Gridcodes des Zeichens laden:
tmp$=substr$(tmp$,2,":")
PLOT tmp$,xx&,yy&,dd&
xx&=xx&+2*6'Schreibposition+2*Step
endwhile
GOTO "NOCHMAL"
Proc PLOT :parameters k$, xx&,yy&,dd&
declare x&,y&
':::print K$
drw&=0
usepen 0,dd&,rgb(255,0,0)
whileloop 1,len(k$),2
'Gridcode xy holen:
x&=val(mid$(k$,&Loop,1))
y&=val(mid$(k$,&Loop+1,1))
'Doppelnull ignorieren (Moveto-Zeichen)
if ((x&=0) and (y&=0))
drw&=0
continue
endif
' Plotten
if drw&=0
moveto xx&+2*x&,yy&+2*y&
drw&=1
else
lineto xx&+2*x&,yy&+2*y&
endif
endwhile
endproc
END
|