ForumBlobPost - Utility (Ver. 0.4-0.51)

Post your FreeBASIC source, examples, tips and tricks here. Please don’t post code without including an explanation.
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

I'd try the following order:
  • C
    POSIX
    en_US.utf8
However, the utf8 stuff probably, requires you to change, the LoadFile() routine.
Using: Encoding "utf8", tried that on WIN already, seems to work OK.
Ideal would be: en_US (without the utf8 stuff).
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

I cannot seem to get your test jpg but I was able to convert one of my own files to and from successfully.
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

Boromir wrote:I cannot seem to get your test jpg but I was able to convert one of my own files to and from successfully.
Can you post it to forum, to make the *reverse* test?
Aka: me testing, whether I can get it? Thanks.
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

Here goes copied from gedit.

Code: Select all

new.png",sqj0-=$-###0lk#gu###‡####‡+)####“…8w##/#)…njg##¢#¢#¢C`˜J6###,“&k|–##.6###.6$#=c?;###*—$lph*„)033BE‹F““###<—h{#—f’ˆ‘#—#f•ˆ„—#ˆ‡CšŒ—‹#Cjlpsz$c1:##.hlCgdw›}@“~•†]Q)bX#G‡J€VŽf‘b|¡: {—VŒ1,GSyRKH|\{c12ŒW{x8ai5¡?¢%%‹œ‚¢žBŠ9j¢™ˆœJaUšh›†q_~|Jn‚aŸ4 e¢‹E%(P3ˆO#O#ONŠ$‡$‡\.#C.Cn|#|+#|q%k•97c9c9V#•{0q˜Œš’zmAEB“‘¢SO@BR('-‹e“h…¡VO:_-‰™aƒ-¡6ˆ[[C%kc7W[=?*#%mŽquC=¢&$j$O;|ž|7d…G‹bm$UŸ,c?w$80Ctl|{Ÿ‘U‰8”š7Sw+tŒ]'‹[#r…Ddt+PE1-DaDˆsnKfz%‡9''…‡œŸ\‰†–N3*::¡ŒR¢Ds˜4 b¡-— <Azfcmˆ?-Heww m“ˆW#<PF‰m‘]>|‘i)04–šiXšc“9—šlP/ši+pB–>D'Mid‘vœ˜–G’oM‘’&EEOey4B¢-—Ž~™Žš¡¡’&B+^†<)P”–‚¢‡•YuM~†Hhyš‚umc6ƒh”š2Ž&“^m$[ˆ6K¡‰)jmTq™Iyž‡pB%tš8W-K‚KxŽZ#g?‰q[=ˆzle|”}'Ÿ4išp#›<7%%X†y{NœS*oy+4d7F‹/fDR4Tl•˜Z˜tOKnP S…zZ2 |Lm™_>$˜&Š“š7HfwŠ{<ˆŠgg3az9XJ˜Z^vŠ~$r—ƒ‰s~5s-c„˜L’e@_‰ŸU‘>Z‹v%kžiX#•JB’0kn¡„b=3RJE/>I8‚pie‘Q/&”S#:RH;>Ÿ‘~aSŸY2‰W(¡msSœE‚ƒ‚N¡Š‚z'Aj=Uœ˜Fž]_CAp;E+D%B›‰…ŸvXCJ`”dFg5^cq$-w-?8œjZ˜*/Vjx“M[.]‰“u“…#€kg?i7Kf2;MVj—@evqJK†r}B•/53(;(s7($Hy™D]’8-E‘GWii†Dz2#–:$‡9i5u$u)3}xŽ)•ERMŸ/5'‘co,0-¢U3H3$3'{j_xV~šz†X>kžMwN |m,@WZL‚whe'W-L,$€u3SM{7 *gI:6(c;‡v-M-D)cPKiy†p‡@™su,Wc‘HgGZSP3.%U,FPdFNu…lAa1•:s‚LL2O‹_&)q‚VO™%i#€œ^¢<Bm.‘=I6’H‚+3|YHsETvmt‹rdX0x2+@s˜$C?¢JE6N'+=*Ežn}ŒE—žw‹%Q'š3%‰j‹BH{P‚aŽg>}S¡:0 ™#“Ÿ}f¢S‰]››ˆBZŽJ™#Ÿ‘ wR‚B3‚OB ~&•bx\ƒ>Ž9c™ˆž6‡bx\>Ž9_c¡„¡1ŽJ™=†k\=Ž9Zc&‡k¡M;[‚–€:“3[‚Xˆ(fžLŸav|]q9c.9–j#En^ZŸ0–`Ÿ5‘ˆ€“{<‘„¡‚G9ZCXbkICjSg…%sIHI+mŠ’Ÿ„>~sGŸC*‹.4=”…}@–Kgb›9B5As‘‘žX5¢y%¡Atm‹+qGI”>…›ƒc1He•p“Ž`{¡-kfZœ†GX}y|~mƒ[+M|e+ew™D™+ME‹sw@=„0_‰M‚š…,›ƒc™L“,<C„M_L,v†)H+wb((2o'o4=}5&~ŽP^--%›cpK•Ex2Aj[(mQmŸ;|_‰,TH#Qc)¡›Ÿž6X†‘[`G>Œ<Ÿ.g0GxE'+h2Ag5:0g(7Ey8ViZžL%em-piŒn-11z3%o.0“Šoh8€IS_=™jAU€+w/B\ž•Š,}**¢oq8ZZeŠmw&:5•š‚0œ”RA,4˜*&B*[RLŸ~ˆxN•’kWb¡C:RŒs…*?ƒ¢IEt-T~ž{_wi€HyŒŠdxšoœG‰j#pw‚‰PT/™¡^V.w‡C8‘x5{¢sG+XZeI\bCp_Yc:mxA=L1|)F;†Y•››[Sœ8<šq1@I)b-u:ŠCX2™\‘ƒ36y{*fš‘š3X•›S…‰r ‹+l48*Okžš’$–@(M\‰‡Dˆ•–„ƒ”Dv>)FyI'¡F|-&VO\8A`‡y?-†+O˜b8”Sm*‘NiksK8hLfŸ0Z™„jM0$0)‰c/†ˆ^LPNœUWlb„ƒVn|.fœˆO>ZNe@–e@90˜€…˜F46u#‹j\TV™$D-MtVT’€1¢9msDT–>&”TmQ ŒHM7:Oj=H^^@T}›‰yš,˜€A›>nzŒ‚tx9gD‡†zfc‰Š‰?L‰4?-)@36Hk}g(šAd0‹/^Š@š‹7bMšbPy‹-Ka Kjht(j;Ys(preSXf¢UL†kp\5†(?l‘¡g^V+Yƒ})v%kf)x€‡‘R€F}-^n[‚R<1dC/8v€Q6Vt.Z=,†:'W,QN`žWx„#ow)nŠ{@.F(6k*lesea8`Cy‡“=ˆ3Ÿ-_K==@Uc~ˆY2F~‚Pi@Wm~O˜NAsC'Cœk<JP…$›`owG4…PqF“'ƒ]TF8mIr'GG¢+$r*ži‘#axJr—kh?V-Z7¡GOV:G'u/G„aUa2gVq9~hfŸˆFUI…sU'K%u7dr6{io›D2i‰Dƒ‘_O’‚'žf69:Lœ63dp,dT?”VtmDR…iLy„‹+L'‘‘F€{€G‚LT^‚uWx„#KgqN|€hcl†Du7“RJ‚so‡eKx;Yyy–EIƒ¢E‰WTMp`‚™bk‚d34y‘VM3&†-HyP™bV22œ,‹1T•oc'•C,w*]˜Cz‚*…]’WxS_ceBJDGM5ETž—Y2‰q;@t>+•–vcTr‘NˆT#(UzVgQWQ0_Rk•WT*J$B‚‰05?:Y'“žNV~‡Y=>F’tDB,<Ee}(yŽekZ&4q:&—+•[('*o~\~CŠ’*‰’%„+]Q8j&V’aŸ8 =ˆ B{€jL…-p _xZU‰0{wŒysEŽˆ›xkf&7—ZX)@†|}BŒBVg/¡XHO¡ge5w&\Ži;EAAs™m‡5D,€n]•zd<jc-‡%x|}‚‹– N‰l^MŠZX‚<Q2G8uRED.g$}ƒ8ž3|VfyŠk&vN0$X–Œ<cw”š9o;trFvv-sx4”FM4˜Œ1~&vxHŒ–‚fi;*+H7F9e˜30š›'XzOaˆ—)06…H/™exk >f™ZB- Ž?“A‘Tq)…)Iytu+Ri–/\–b1>v[m,wl¡CJ€GH˜mA/„GŽA(i‰™Ug0‡›]‡bg‰<$LhLdaK&V_vsU‹6¡<O„BŸWXd& ]Tt¡4ŒyR…ih<.zšJ‡6V\Oœ‘D,3R7eJpJ){'5NH=‘y(S6ue|Cy~hrXjwICr^m‡El‡šWOc[ƒhpB(3‹„8˜:} /•\?apJ™g—Zƒ,;9{(`h6…7]q<*+ˆ^L/Fbx=€•lœ>[>žxŸ\||š7$M‹+G{œw}Z#AQ`gkcdV’{7z+3‡•†#T3]IK=0—eld¡€:™‘—$2‹'3uB|€jy3ŽH~@”,dj…/ŠE‚ŠCŠ3Eƒ$W™)Q#7?.b™,ƒ¢(tƒf5~IzpL[C—m/z€-37r›qoŽKyE„nCU.‡m‘t;*dp†axV?8%4o9šI›45u—‚(y6@UJhY•ˆ‘Š›$@ˆžuCM5c'3cA(_=45n7/B$tžŽQ`Z‰ŠŽ?d^)k/$‘)†‘hžoPyVpp-,%dzesDGˆ%{wi@5nV`Sƒr~™‹W+–#Wš({„—=o9D+g^5—h_s…7X9“0¡f]:œ1udczc%™P‰<š8h”Ž0;=C;KPƒ^>)Z>gVk†~e*-W9W)iŒ¡%uJO’–¢ARq—t‚\/3:d¡Q|M…#s*]x{y&iK6zw7hM``‡ga€3C'7l@n5E36EdA~:8€KB*3:XnŽc7Œ?k&tiF2)eLŠ>™?z—™h‹^˜.h‚7&Yb¡Sz Z+:Z$‡&ƒu0—%š-ˆJ2ipu_`‡7{YBPn@E€ž~2lwAŽ-„}™”…Y#_$a/'+x“GGtb•™WI#R9E`\HRY]~ƒ™6wžhPh„›HŠJ0¡:‚^”XYi}¡fHœ:]GW9V#U?’(3(3ˆO#}O#OŠ$‡$%‡\.C¢TC›¢tžrD8i—####(lhqgQeƒ3%$
EDIT: I tried copying this back off the forum and it's not working any more. It only works freshly generated by the utility. The forum corrupts it.

EDIT: Some more testing...

Code: Select all

new.png",sq$j0-#=-####0#lkg#u####‡####‡#+)####“#E8w.####)…n#jg##b#bP#bC9`J6*####,“k#|–###.6###.#6$##=?;&####*—l#ph*#D)0,3BE#‹]F9S##,#<—#h{—#f’#ˆ‘#—#f#•ˆ„#—ˆ‡#CšŒ#—‹C#jlp#sz$'1:###.(Glgd#w›=GP@>R•F]5Q)b&#G‡&J€V#N‘b,<¡:0`;V>L1.,GS(RKH#|\#;12.LW{.88a.)5¡,?¢%#‹\BYb^B>J9*PbYHb\JU0Zh[PFq_0<J.PBa_R4%¢6PKE>%(3(HO#0O#O%Š$‡#$‡\#.C.#C.|5#|##|1%5+•9,c9c#9V#&U01P˜Lš5’:A5EB“#PQ¢>O@B#R('(-e“$A(…>aV:,_-IH™aƒ#¡6ˆ#[[C$%c7$W[=#?*%'-N1b5C=2&$j&$O;*<|70dEG5‹b$)UŸ,#c?w#80C'4,<b;‘U,‰8TGZ7w,+tLG]'‹&#rEHDd4H+E1#-Da'DHn5K&z5%‡9#'EGYœ_G\†VHN3**::LJRbD93X4Bba-:—`<5Af#Hmˆ?#-Hw%w`5-Sˆ>#<P%FI-Z‘><I‘i)'04š&iXš%#S9BZlP0/ši$+B–&>D'#M)‘5v\XY–GRGMQ’5&EE#O94:Bb-9—NYYNZaba’&,+^†&<)P)TBbb‡UY9uM†%Hh9Hš‚5G#6ƒ.(”ZP2&SJ^m$'[ˆK'¡‰#)*m61YIB9^‡>p%4IZ8W2-KK%8NZ>#'?91[5=ˆz#,<Tb='_P4)0Z#[<57%%&F9;bNœ#S/AYy+4#$7MP‹/f#DR4&l•˜#Z˜4HO.P9`S….zZ`G|Lm#™_>#X&Š.“š7#HwŠ$;<ˆ,Š'35az9(XJXIZ^6GŠ>$92ƒ‰,s~5#s-„%X]LBRe@0_IMZŸUQI>‹6G%+^Y)X#.UJB2R0+P.aDbb=3'RE/'>I8$‚0e5‘Q/#&”S#:RH&;>Ÿ&QaS._Y2,‰W¡#msS#œEBI‚NaIJBz>'j='U\XYFž_(CAp#;E+%%B[H‰E_YvCJ#]`”,dF5%^c1H$-w#?8\G*Z˜,*V*GxSM9[.IH“P5YS…#0+'?B)7K,f;M)VjWG@%1YJKFJ2},•/5#3(;%(7(($H9IYD’,8-E%PQG>))†>D:29#:$&‡9i#5uu#)3}$8N)BERM)_/50'co$,0-'¢UH#3$3)';j6]xV0~Z:Y†>k%žM7IN`m5,@W%ZLBH(e',W-L#,€u#M3S0M{ #*gI#:6(';G6Y-M-#D#5PKi&yF‡5@Y535,>#‘H0'GZ0S3.%%U,#FPF%N5EZlAa#•:3GBLL02‹_#&)q&BVYP%)#:@\^B<Bm&.Q=5I’H'B+30<H0sE#Tv-HK2$b]X0,x+@)3X$BC?J&E6(N'+$*Ež%.=LbEW^Z7‹%0Q'3*%Ij5KB5{P‚%aNg6>S¡$:0`GY#Ÿ.}fbGSI]:[ˆB0OZNPJ]YZ#_‘6`wBPB3BIOBMJ~&•#b8G\>NJ9cYGˆž‡#b8\9>N96caDY¡1NIJ=FJ+\=0N9c,&GG+¡M,[‚–#@:SR3‚X#H(&R^La26|]0q9c#9V*Z#E.I^Ÿ0'VM`>_5ˆ.@S;b<QDZ‚G9#ZCX$bIC$jS'G…%I%HI+)-JRbD>>RsGŸ#CK.54=TJ…}–#Kgb$[9B,A3QZQ^XB5y%(¡]A54KY+qG(I”$…[ƒ5c1H)%p“,Ž`{%¡-f%Z\†6GX=H<~m,C[+.Me+$e7™5D™M'E‹s#w@=)0_‰$M‚š$…[ƒ5cYL9“,C'DM,_L,(F)H0+wb#(2/G'o4'=}&#>ŽP0^-#%›#HpK•%E2A(j[(%mQ_I;<G_‰#TAH9#Qc#¡[G_^6>XF[6`G]I>L<:.g0#GxE$'(52Ag&5:g#(7E&y8V'ZžL(%em$-iŒ$n-1'1z%'o.0%“Š/G8@I:S_=#YAU.€+7I/B^HUJ,B=**2o185ZZe$J7&>:5•&š‚\GTRA.,4˜#&B'*[R*L~ˆ$8NUPRkb0aC:2M5L]3bE*?2CIE2t-T)>O;b_w)G€H9IJd8PZo\P?GIR*#ORp7IYPT/$Ya^>.7‡5C8‘%x{bGsG+#XZI%\bC#p_Y':mx$A=L&1)F$;FY9U[[>S\8:<šq#@I)*b-5G:CX$2™\'‘ƒ6'9;*>&ZQb3XUJ[S…,I?`bK+l,48O'k^ZYR$–,(M(\‰GGDUVZ„CTYDv)#F9I:'¡F(|-&)VO\&8`‡#9?-.F+XPb8”&Sm#QN)PksK#8L&J_0Z,™D5M0$#0)IG/†ˆ$^LP*NUW*lb'Dƒ.P<.&P\ˆO,ZN%I@Ve5@0XI€…XGF4u##Kj6\TV*$D-*MtV(T@16¢9#-sT,V>&2”Tm%`LHBM7:#O=H$^^@)T=‰6yš,'X@AB>.:YŒBt5xgD'‡F:Y&#IbŠ‰?#PL‰,?-)(@3'6+GO='b(š$G0MKY/^Š$Z‹70bMZHby‹#-K%a j$ht(#*;Y0(02Z%SX2&UL2†kp#\5(*?,HQag>V+Y%ƒ})#v+&Y)8€6G‘@PF=-:^n[(R<1&dC/%8@Q66Vt&.Z=&,F::'W,%N`^GW8„6#/w6).JZ{.'FP(66k#,e3P%]aB8Cy#GS=BH3-._K=#=@U'>ˆY02F>H‚i@#PW.-~XPNA3GC'C*+<J0PE$:›o?G7G4.…PF)S'ƒ,]T%8-I:2'G2G+($2*6^)#Ba8J5r—+G?V-'Z7aHGV:%G'u#/Ga&Ua2&'Vq,~(&YŸˆF'U…s#U'K(%ud#r6;GO)/bD2)GIDCR‘ORI‚'^Gf9':L\I63$G,$T5?”V$4DR,…)L59D+>L'QGQF@P€G‚%LT^%BW8R„#K%'q|,@hc,,†D07“R'J‚3G/%KBx;Y'99E>Iƒ%bE‰.TM0J`OBZ™+BYd34'9‘M03&FI-Hy%™bV#22\H,1T(•/G#'C2,7*6]˜C(‚*…#]RW9x_#GeBJ%DG5$ETž&—Y2)1;@.t>+)U6c>Tr$QNT2#(U)zV'IQW#Q0_$RUW:T*J*$B‰%05?#:Y'*^N5V>‡6Y>F#R4D>B,<&Ee}$(yNGkZ&'41:9&+•$[('&*P>Y?\~.CŠ’#I’%0„+]%Q*&5VRa:_8=2ˆ B'{@j5…-p% _8IZ‰0'{wŒ#9sŽ,ˆ[x5+f&,—ZX%)@†&<BŒ.BV'H/¡H(O¡g$e5w#\Ži#;EA%AY-Z‡5D%,@]5•zd#<*G-G%:8<}>O‹VP N‰%,^Š,ZX]H‚<Q)2G8)5RE.D.g&$PH}ƒ^G3<6V&9Y+&v.N0$)XŒ<$#7”>š9;)4rF,6AP-sx$4TF5MXŒ51~&$6xŒ,–‚&Gi;*#H7F(9e˜$3š[G'XOJ:Oˆ,—)0)6…H#Y%>xk #>™Z$BM-: Ž“#AQT6q)…#I9t6u+R))/\,–b1)>v-H,7,YaCJ0GHXGmA/'„ŽOGA()GI™g,0G›5]‡b'‰<$)L(L:dK&'V_]G6s‹,6a<9ODB:WXd$&`]5Ta46LyR,…)<9.zš$JG66\O\JQD,037e#J0J:);5'5N&H=QH(S6)u%|5C>H(rX,*wC,r^m%‡E,IZWOPOc[#C0B>(3KH„˜#:=`Y/•\$a0J:Y'Y—C,5;9{$(`6%…7]'q<*#ˆ^L%/Fb&x@UYlP\Y>[ž#x_\5<|š,$M‹$+G;J?w},Z#A$Q`k%cdPGVRH7z+#3‡•#†T3#]IK(=0&%,$ba€:0™‘PG—$2#‹3u#B|@GjyŽ#H~@(”,$IjE/5JEBRJCJP3ECH$W)*Q#OJ7?.&Y,ƒ.¢(t#C5~,I:0YLC$—m/#:€-,72[Yq/Ž5KE$DnC,U.-JQt;,*$0YaxV'?8%$49š$I›4(55BZ(965@UJ'Y•HHQJ›>$ˆž#uC#M5')3cA#(_=$5.76/B$*4ŽQ,`ZIJŠŽ#$^)0k/$)‘)FGQh,^P9PVpp#-,d#:es,DGˆ#;w)P@5.JVSƒ#2~APY‹+0–#W#š(;I—='o9D#+^5$Wh_0s…#X9SH0af6:œ1#udc#:%™.P‰<$š8”%Ž0;'?=C,KPCH^>)(Z>'HVk†#>*5-W9&W)'La%>uJO)RbA>R1WY4‚/,3:$H¡Q|%…#3I*]x%;&i,K6:Hwh#M``*GOg>@3C.'7l$@5E*36E)dA:)8@K6B#3:X$.Ž#P7?+H&ti$F2e#LJ>5Y?:RY(>K^,˜hBG]7&2YbS&z`Z9+:Z($G&5ƒu0#—š-'ˆJ2'i0_9`GOZ7{Y$PPn6@E€&^2,PwANI-D™5TEYB#_$&/'+$xSG5Gb$•™#WIR#9E`&\HR&]~CH™6w#^Ph.D[H>ŠJ¡#?:‚.^TX6i=¡5&H\R:GW)9V#&U?(&3(3(HO#0O#O%Š$‡#$‡\#.C¢#OT[P¢t#^r58iWH#####lh#qgQ'eƒ%'
Last edited by Boromir on Jun 14, 2017 19:07, edited 2 times in total.
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

Boromir wrote:It only works freshly generated by the utility. The forum corrupts it.
Yep, same thing here.
No idea, how to even attempt, to solve that (on WIN, working with US-ASCII, FB internal, tested: OK!)
First ver: dodicat's compress/uncompress
Second ver: Base128 encoded/decoded
Third ver: also Base128 encoded/decoded (.B128 introduced)
Fourth ver: also Base128 encoded/decoded (CP switching added)
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

Since there is no visual difference between what's copied from the forum and local copies how hard could it be to make a converter?
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

I've no idea (I'm on WIN, don't need any converter). But I think you are concentrating
on the wrong end. I'd try to make something similar, to the WIN-version ... (proper
terminal setting).
I'm "saving" current first, then switch until processing is done, then switch back to "saved".
St_W
Posts: 1626
Joined: Feb 11, 2009 14:24
Location: Austria
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by St_W »

Probably you should further reduce the character set as obviously the forum doesn't like some characters. You could compare the text before and after pasting+copying to/from the forum and identify modified characters. Of course that would enlarge the post, but a format which cannot be simply copy/pasted into a forum is pretty useless for this type of sharing (still, it may be useful for other things).
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

St_W wrote:Of course that would enlarge the post ...
Well, that's where we are "coming" from. In ver. 0.1 we've used a scheme from
dodicat, which uses only 100 different char's, but at the "cost" of 50% overhead.
The now used scheme, is only creating 14% overhead.

The base problem is, that the forum is using UTF-8. (but not always converts, to it)

Here is Version 0.1:

Code: Select all

' ForumBlobPost_V01.bas -- 2017-06-07, by dodicat and MrSwiss

#Include "file.bi"

Dim Shared As String arr(0 To 99), i(48 To 147)
For x As Integer=0 To 99
    arr(x)=Chr(x+48)
    Var sx=Str(x)
    If Len(sx)=1 Then sx="0"+sx
    i(x+48)=sx
Next x

Function loadfile(ByRef file As String) As String
    Var f = FreeFile
    Open file For Binary Access Read As #f
    Dim As String text
    If Lof(f) > 0 Then
        text = String(Lof(f), 0)
        Get #f, , text
    End If
    Close #f
    Return text
End Function

Sub savefile(ByRef filename As String,p As String)
    var n = FreeFile
    n=Freefile
    If Open (filename For Binary Access Write As #n)=0 Then
        Put #n,,p
        Close
    Else
        Print "Unable to load " + filename
    End If
End Sub

' "make" proc.'s --- to forum
Function build(ByRef s As String) As String
    Dim As String acc
    For n As Long=0 To Len(s)-1
       acc+=Right("000" + Str(s[n]),3)
    Next
    Return acc
End Function

Function compress(Byval num As String) As String
    Dim As Long flag
    Dim As String c
    For n As Long=1 To Len(num) Step 2
        Var m=Mid(num,n,2)
        c+=arr(Vallng(m))
    Next
    Return c
End Function

' "invers" make proc.'s --- from forum

Function uncompress(ByVal num As String) As String
    Dim As String c
    For n As Long=0 To Len(num)-1
        c += i(num[n])
    Next
    Return c
End Function

Function rebuild(s As String) As String
    Dim As String acc
    For n As Long=1 To Len(s) Step 3
        acc+=Chr(ValLng(Mid(s,n,3)))
    Next
    Return acc
End Function

' ---
Sub GetUserInput( _
    ByRef sFle As String, _                 ' file name
    ByRef sPth As String, _                 ' file path (if required only)
    ByVal mode As UByte=0 _                 ' 0 = default input, 1 = output
    )

    Dim As String   q, a                    ' question/answer strings (local)

again:
    Select Case As Const mode
        Case 0 : q = "please enter INPUT file name: "
        Case 1 : q = "please enter OUTPUT file name: "
        Case Else : Exit Sub                ' not implemented: quit
    End Select
    Line Input q, a                         ' ask for file
    If a = "" Then GoTo again               ' file name is mandatory!
    sFle = a : a = ""
    q = "please enter path (if any) or hit [Enter] : "
    Line Input q, a                         ' ask for path
    sPth = a                                ' finished (path is optional)
    If Len(sPth) > 0 Then                   ' just in case: not empty
        Var t = Len(sPth)                   ' check for trailing slash
        Dim As UByte tub = sPth[t-1]        ' get last byte
        If Chr(tub) <> "\" OrElse Chr(tub) <> "/" Then
            sPth += "/"                     ' add it, if missing (WIN/LIN)
        EndIf                               ' for DOS/WIN, use backslash
    EndIf
End Sub

' ===== MAIN =====
Width 120, 25   ' we might want a larger console window

Dim As String   sPath, sFile, sMeth, sQuest, sAns, c, d, sDir = CurDir
Dim As String   sTitle = "ForumBlobPost - Utility, version 0.1 Alpha", _
                uline = String(Len(sTitle), "-")

start:
Cls : Print sTitle : Print uline : Print
sQuest = "enter the direction: to/from Forum [t|f] 'q = quit' : "
Line Input sQuest, sAns ' line input accepts a string-var (input doesn't)
' evaluate user input
Select Case As Const Asc(LCase(sAns), 1)    ' check of first char only
    Case 102
        GetUserInput(sFile, sPath)          ' f/F entered
        If sPath = "" Then c=loadfile(sFile) Else c=loadfile(sPath + sFile)
        GetUserInput(sFile, sPath, 1)
        If sPath = "" Then d = sFile Else d = sPath + sFile
        Var u=uncompress(c)
        Var r=rebuild(u)
        savefile(d, r)
    Case 113
        Print "quiting ..." : Sleep 750, 1 : End ' q/Q entered
    Case 116
        GetUserInput(sFile, sPath)          ' t/T entered
        If sPath = "" Then c=loadfile(sFile) Else c=loadfile(sPath + sFile)
        GetUserInput(sFile, sPath, 1)
        If sPath = "" Then d = sFile Else d = sPath + sFile
        Var u=build(c)
        Var r=compress(u)
        savefile(d, r)
    Case Else
        sAns = "" : Color 12 : Print "unrecognized command" ' in red
        Color 7 : Sleep 1500, 1 : GoTo start' all else (ask again)
End Select

Print : Print "Done ..."
If CurDir <> sdir Then ChDir(sDir)  ' restore path
Sleep : End 0
' ===== END-MAIN =====  ' ----- EOF -----
Remember:
no special (later) additions, raw, but, anything goes ... (as they say)
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

Hi all,

here goes Version 0.5, re-coded to use BASE64 encode/decode, should solve the
problems encountered, before (with 0.1 to 0.4) there are some changes:
  • extension: old .B128 is now .B64
No other changes from ver. 0.4

Code: Select all

' ForumBlobPost_V05.bas -- 2017-06-14, by MrSwiss (ver. 0.5)
' "original thread at (current end):
' https://freebasic.net/forum/viewtopic.php?f=15&p=233256#p233256

' Credits go to (in alphabetical order): BasicCoder2, dodicat,
' leopardpm, caseih and, unnamed others, of FB-Forum
'
' added CP switching code 2017-06-13, tested it with CP 850, OK
' in order for all forum users, to use the same settings before
' the Utility itself is started ... original is restored at end
' of program -- compile with: -s console

#Include "file.bi"

Const As String ForumExt = ".B64"

Function LoadFile( _
    ByVal filen As String _
    ) As String

    Dim As String text = ""

    If FileExists(filen) Then       ' crash, if not existing!
        Var f = FreeFile
        If Open (filen For Binary Access Read As #f) = 0 Then
            If Lof(f) > 0 Then
                text = String(Lof(f), 0)
                Get #f,, text
            End If
            Close(f)
        Else
            Print "Unable to load: " + filen
        End If
    Else
        Print "File not existing: " + filen
    End If

    Return text
End Function

Sub SaveFile( _
    ByVal filen As String, _
    ByRef p     As String _         ' string might be too large for ByVal
    )

    var f = FreeFile
    If Open (filen For Binary Access Write As #f) = 0 Then
        If Len(p) > 0 Then Put #f,, p
        Close(f)
    Else
        Print "Unable to load: " + filen
    End If
End Sub

Function EncBase64( _               ' direction --> to forum
    ByRef iStr As Const String, _   ' source string-part ASCII
    ByVal n_sLen As UByte = 3 _     ' length of string-part (default = 3)
    ) As String                     ' base128 string-part

    Dim As UByte    rmdr = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen, 0)

    For i As UInteger = 0 To n_sLen - 1
        s_chr = s_stmp[i]           ' get a byte, then check value
        If s_chr > 127 Then         ' if leading bit is set, then
            rmdr = BitSet(rmdr, i)  ' remember in "flags" byte
            s_chr -= 128            ' clear leading bit (MSbit)
            If s_chr > 63 Then      ' second bit
                rmdr = BitSet(rmdr, i+3)    ' 0 and 3 etc.
                s_chr -= 64
            EndIf
        End If
        t_sret[i] = s_chr           ' assign to return string
    Next
    t_sret += Chr(rmdr)             ' add "flags" to string

    Return t_sret
End Function

Function DecBase64( _               ' direction <-- from forum
    ByRef iStr As Const String, _   ' as EncBase128
    ByVal n_sLen As UByte = 4 _     ' string length with "flags" (+1)
    ) As String

    Dim As UByte    rmdr = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen - 1, 0)

    rmdr = iStr[n_sLen - 1]         ' save decoder byte "flags"
    For i As UInteger = 0 To n_sLen - 2 ' without decoder byte
        s_chr = s_stmp[i]           ' get a byte
        If Bit(rmdr, i) Then s_chr += 128   ' check "flags" and set leading bit
        If Bit(rmdr, i+3) Then s_chr += 64  ' check "flags" and set second bit
        t_sret[i] = s_chr           ' assign to return string
    Next

    Return t_sret
End Function

Function ShiftB64( _                ' ver 0.5
    ByRef iStr As Const String _    ' source = ASCII string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 3, n_rem = Len(iStr) Mod 3
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = ""

    ' get encoded string (8 byte, from 7 byte "original")
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 3 + 1
        s_tstr = Mid(iStr, sPos, 3)
        s_ret += EncBase64(s_tstr)  ' encode to 4 byte string
    Next
    ' string-end processing
    If n_rem > 0 Then
        Var sPos = n_run * 3 + 1
        s_estr = Mid(iStr, sPos, n_rem)  ' string remainder
        s_ret += EncBase64(s_estr, n_rem)  ' encode rem.
    End If
    ' shift every byte to "printable", add 35
    For j As UInteger = 0 To Len(s_ret) - 1
        s_tchr = s_ret[j] + 35       ' apply shift
        s_ret[j] = s_tchr            ' write back to string
    Next

    Return s_ret
End Function

Function ShiftASCII( _              ' ver 0.5
    ByRef iStr As Const String _    ' source = B64 string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 4, n_rem = Len(iStr) Mod 4
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = "", s_tmp = iStr

    ' reverse shift to "B64 encoded"
    For j As UInteger = 0 To Len(s_tmp) - 1
        s_tchr = s_tmp[j] - 35      ' get shifted byte & un-shift
        s_tmp[j] = s_tchr           ' write un-shifted back
    Next
    ' get decoded string (4 byte chunks)
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 4 + 1
        s_tstr = Mid(s_tmp, sPos, 4)
        s_ret += DecBase64(s_tstr) ' decode string
    Next
    ' string-end processing (shorter than 4)
    If n_rem > 0 Then
        Var sPos = n_run * 4 + 1
        s_estr = Mid(s_tmp, sPos, n_rem)   ' string end
        s_ret += DecBase64(s_estr, n_rem)  ' decode string end
    End If

    Return s_ret
End Function

Sub GetUserInput( _
    ByRef sFle As String, _                ' file name (with or without ext)
    ByVal mode As UByte = 0 _              ' 0 = default +ext, 1 = no ext                
    )

    Dim As String q = "Please, enter INPUT file name: ", a  ' question/answer strings (local)

again:
    Line Input q, a                         ' ask for filename
    If a = "" Then GoTo again               ' file name is mandatory!
    If mode = 1 AndAlso InStr(a, ".") Then  ' ext check in mode = 1 only
        Color 12 : Print "File contains extension, enter filename without it! ";
        Sleep 1500, 1 : Color 7 : GoTo again
    End If
    If mode = 1 Then a += ForumExt          ' add extension ".B128"
    sFle = a
End Sub

' ===== MAIN =====
Width 120, 25   ' we might want a larger console window

Dim As String   sFile, sQuest, sAns, c, d, sDir = CurDir
Dim As String   sTitle = "ForumBlobPost - Utility, version 0.5 (BASE64)", _
                uline = String(Len(sTitle), "-")

start:
Cls : Color 15 : Print sTitle : Print uline : Print : Color 7
sQuest = "enter the direction: to/from Forum [t|f] 'q = quit' : "
Line Input sQuest, sAns ' line input accepts a string-var (input doesn't)
' evaluate user input
Select Case As Const Asc(LCase(sAns), 1)    ' check of first char only
    Case 102
        Color 10 : Print "Enter filename *without* extension, please!" : Color 7
        GetUserInput(sFile, 1)              ' f/F entered, extension ".B128" assumed
        c = LoadFile(sFile)
        Var npos = InStr(c, Chr(34))        ' extract "original" filename, shorten
        d = Left(c, npos - 1) : c = Right(c, Len(c) - npos) ' source string
        Var r = ShiftASCII(c)               ' decode
        SaveFile(d, r)                      ' ATTENTION: overwrites source file!!!
    Case 113
        Print "quiting ..." : Sleep 750, 1  ' q/Q entered (user abort)
    Case 116
        Color 11 : Print "Enter filename *with* extension, please!" : Color 7
        GetUserInput(sFile)                 ' t/T entered, get source file
        Var dot = InStr(sFile, ".")         ' get dot position
        d = Left(sFile, dot - 1)            ' extract filename only
        If Len(d) > 0 Then                  ' check whether there is something
            d += ForumExt : c = LoadFile(sFile) ' add extension, then load it 
        Else
            Print "File ERROR! " + d : Exit Select
        EndIf
        Var r = ShiftB64(c) : r = sFile + Chr(34) + r  ' encode
        SaveFile(d, r)
    Case Else
        sAns = "" : Color 12 : Print "unrecognized command" ' in red
        Color 7 : Sleep 1500, 1 : GoTo start' all else (ask again)
End Select

Print : Print "Done ..."
If CurDir <> sdir Then ChDir(sDir)          ' restore path

Sleep
' ===== END-MAIN =====  ' ----- EOF -----
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

MrSwiss wrote:Hi all,

here goes Version 0.5, re-coded to use BASE64 encode/decode, should solve the
problems encountered, before (with 0.1 to 0.4) there are some changes:
  • extension: old .B128 is now .B64
  • removed the CP switching code (for WIN, only)
No other changes from ver. 0.4

Code: Select all

' ForumBlobPost_V05.bas -- 2017-06-14, by MrSwiss (ver. 0.5)
' "original thread at (current end):
' https://freebasic.net/forum/viewtopic.php?f=15&p=233256#p233256

' Credits go to (in alphabetical order): BasicCoder2, dodicat,
' leopardpm, caseih and, unnamed others, of FB-Forum
'
' -- compile with: -s console

#Include "file.bi"

Const As String ForumExt = ".B64"

Function LoadFile( _
    ByVal filen As String _
    ) As String

    Dim As String text = ""

    If FileExists(filen) Then       ' crash, if not existing!
        Var f = FreeFile
        If Open (filen For Binary Access Read As #f) = 0 Then
            If Lof(f) > 0 Then
                text = String(Lof(f), 0)
                Get #f,, text
            End If
            Close(f)
        Else
            Print "Unable to load: " + filen
        End If
    Else
        Print "File not existing: " + filen
    End If

    Return text
End Function

Sub SaveFile( _
    ByVal filen As String, _
    ByRef p     As String _         ' string might be too large for ByVal
    )

    var f = FreeFile
    If Open (filen For Binary Access Write As #f) = 0 Then
        If Len(p) > 0 Then Put #f,, p
        Close(f)
    Else
        Print "Unable to load: " + filen
    End If
End Sub

Function EncBase64( _               ' direction --> to forum
    ByRef iStr As Const String, _   ' source string-part ASCII
    ByVal n_sLen As UByte = 3 _     ' length of string-part (default = 3)
    ) As String                     ' base128 string-part

    Dim As UByte    rmdr = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen, 0)

    For i As UInteger = 0 To n_sLen - 1
        s_chr = s_stmp[i]           ' get a byte, then check value
        If s_chr > 127 Then         ' if leading bit is set, then
            rmdr = BitSet(rmdr, i)  ' remember in "flags" byte
            s_chr -= 128            ' clear leading bit (MSbit)
            If s_chr > 63 Then      ' second bit
                rmdr = BitSet(rmdr, i+3)    ' 0 and 3 etc.
                s_chr -= 64
            EndIf
        End If
        t_sret[i] = s_chr           ' assign to return string
    Next
    t_sret += Chr(rmdr)             ' add "flags" to string

    Return t_sret
End Function

Function DecBase64( _               ' direction <-- from forum
    ByRef iStr As Const String, _   ' as EncBase128
    ByVal n_sLen As UByte = 4 _     ' string length with "flags" (+1)
    ) As String

    Dim As UByte    rmdr = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen - 1, 0)

    rmdr = iStr[n_sLen - 1]         ' save decoder byte "flags"
    For i As UInteger = 0 To n_sLen - 2 ' without decoder byte
        s_chr = s_stmp[i]           ' get a byte
        If Bit(rmdr, i) Then s_chr += 128   ' check "flags" and set leading bit
        If Bit(rmdr, i+3) Then s_chr += 64  ' check "flags" and set second bit
        t_sret[i] = s_chr           ' assign to return string
    Next

    Return t_sret
End Function

Function ShiftB64( _                ' ver 0.5
    ByRef iStr As Const String _    ' source = ASCII string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 3, n_rem = Len(iStr) Mod 3
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = ""

    ' get encoded string (8 byte, from 7 byte "original")
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 3 + 1
        s_tstr = Mid(iStr, sPos, 3)
        s_ret += EncBase64(s_tstr)  ' encode to 4 byte string
    Next
    ' string-end processing
    If n_rem > 0 Then
        Var sPos = n_run * 3 + 1
        s_estr = Mid(iStr, sPos, n_rem)  ' string remainder
        s_ret += EncBase64(s_estr, n_rem)  ' encode rem.
    End If
    ' shift every byte to "printable", add 35
    For j As UInteger = 0 To Len(s_ret) - 1
        s_tchr = s_ret[j] + 35       ' apply shift
        s_ret[j] = s_tchr            ' write back to string
    Next

    Return s_ret
End Function

Function ShiftASCII( _              ' ver 0.5
    ByRef iStr As Const String _    ' source = B64 string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 4, n_rem = Len(iStr) Mod 4
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = "", s_tmp = iStr

    ' reverse shift to "B64 encoded"
    For j As UInteger = 0 To Len(s_tmp) - 1
        s_tchr = s_tmp[j] - 35      ' get shifted byte & un-shift
        s_tmp[j] = s_tchr           ' write un-shifted back
    Next
    ' get decoded string (4 byte chunks)
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 4 + 1
        s_tstr = Mid(s_tmp, sPos, 4)
        s_ret += DecBase64(s_tstr) ' decode string
    Next
    ' string-end processing (shorter than 4)
    If n_rem > 0 Then
        Var sPos = n_run * 4 + 1
        s_estr = Mid(s_tmp, sPos, n_rem)   ' string end
        s_ret += DecBase64(s_estr, n_rem)  ' decode string end
    End If

    Return s_ret
End Function

Sub GetUserInput( _
    ByRef sFle As String, _                ' file name (with or without ext)
    ByVal mode As UByte = 0 _              ' 0 = default +ext, 1 = no ext                
    )

    Dim As String q = "Please, enter INPUT file name: ", a  ' question/answer strings (local)

again:
    Line Input q, a                         ' ask for filename
    If a = "" Then GoTo again               ' file name is mandatory!
    If mode = 1 AndAlso InStr(a, ".") Then  ' ext check in mode = 1 only
        Color 12 : Print "File contains extension, enter filename without it! ";
        Sleep 1500, 1 : Color 7 : GoTo again
    End If
    If mode = 1 Then a += ForumExt          ' add extension ".B128"
    sFle = a
End Sub

' ===== MAIN =====
Width 120, 25   ' we might want a larger console window

Dim As String   sFile, sQuest, sAns, c, d, sDir = CurDir
Dim As String   sTitle = "ForumBlobPost - Utility, version 0.5 (BASE64)", _
                uline = String(Len(sTitle), "-")

start:
Cls : Color 15 : Print sTitle : Print uline : Print : Color 7
sQuest = "enter the direction: to/from Forum [t|f] 'q = quit' : "
Line Input sQuest, sAns ' line input accepts a string-var (input doesn't)
' evaluate user input
Select Case As Const Asc(LCase(sAns), 1)    ' check of first char only
    Case 102
        Color 10 : Print "Enter filename *without* extension, please!" : Color 7
        GetUserInput(sFile, 1)              ' f/F entered, extension ".B128" assumed
        c = LoadFile(sFile)
        Var npos = InStr(c, Chr(34))        ' extract "original" filename, shorten
        d = Left(c, npos - 1) : c = Right(c, Len(c) - npos) ' source string
        Var r = ShiftASCII(c)               ' decode
        SaveFile(d, r)                      ' ATTENTION: overwrites source file!!!
    Case 113
        Print "quiting ..." : Sleep 750, 1  ' q/Q entered (user abort)
    Case 116
        Color 11 : Print "Enter filename *with* extension, please!" : Color 7
        GetUserInput(sFile)                 ' t/T entered, get source file
        Var dot = InStr(sFile, ".")         ' get dot position
        d = Left(sFile, dot - 1)            ' extract filename only
        If Len(d) > 0 Then                  ' check whether there is something
            d += ForumExt : c = LoadFile(sFile) ' add extension, then load it 
        Else
            Print "File ERROR! " + d : Exit Select
        EndIf
        Var r = ShiftB64(c) : r = sFile + Chr(34) + r  ' encode
        SaveFile(d, r)
    Case Else
        sAns = "" : Color 12 : Print "unrecognized command" ' in red
        Color 7 : Sleep 1500, 1 : GoTo start' all else (ask again)
End Select

Print : Print "Done ..."
If CurDir <> sdir Then ChDir(sDir)          ' restore path

Sleep
' ===== END-MAIN =====  ' ----- EOF -----
leopardpm
Posts: 1795
Joined: Feb 28, 2009 20:58

Re: ForumBlobPost - Utility (Ver.0.4)

Post by leopardpm »

Thank you, Mr. Swiss - though I am disgusted that we can only utilize 6 bits of each forum byte for our transfer... seems so dang inefficient!
St_W
Posts: 1626
Joined: Feb 11, 2009 14:24
Location: Austria
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by St_W »

leopardpm wrote:Thank you, Mr. Swiss - though I am disgusted that we can only utilize 6 bits of each forum byte for our transfer... seems so dang inefficient!
Hm, yes, the easiest solution would be to allow attachments in this forum. I've no idea why this isn't allowed as the necessary storage for that shouldn't be expensive at all these days.
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

leopardpm wrote:... only utilize 6 bits of each forum byte for our transfer... seems so dang inefficient!
Well, yes and no.
Yes, its a shame to have 1/3 overhead.
No, the advantage, of not having to adapt to OS specific encoding mechanisms is,
as far as I'm concerned, just to big a benefit. (commonly known as: tradeoff)
St_W wrote:... the easiest solution would be to allow attachments in this forum.
Agreed, but since it has been asked before (by other members) and, never got a
response, it seems to be "the only possible workaround".
leopardpm
Posts: 1795
Joined: Feb 28, 2009 20:58

Re: ForumBlobPost - Utility (Ver.0.4)

Post by leopardpm »

MrSwiss wrote:
leopardpm wrote:... only utilize 6 bits of each forum byte for our transfer... seems so dang inefficient!
Well, yes and no.
Yes, its a shame to have 1/3 overhead.
No, the advantage, of not having to adapt to OS specific encoding mechanisms is,
as far as I'm concerned, just to big a benefit. (commonly known as: tradeoff)
yes, of course it is more important to be cross-compatible... I was just wanting my cake and eat it too...
St_W wrote:... the easiest solution would be to allow attachments in this forum.
Agreed, but since it has been asked before (by other members) and, never got a response, it seems to be "the only possible workaround".
yes.... now, if only WE could write a forum program in FB, the exact way we would like it... it could be BADASS! I could think of a thousand improvements as to how to better deal with threads that migrate off-topic, better, and more compact representation of posts (the 'quote' look takes up alot of screen space, makes for more user scrolling, etc), being able to attach images, being able to attach .EXE's that would be automatically virus scanned so folks could trust them more - having a section which would have completed projects and then the links to any threads pertaining to their development, etc... but the projects would be displayed and presented in a uniform way instead of in a regular thread... BUT, I am just 'wishing' here... right? or is it possible for us FB programmers to make a server-side program that throws up webpages and maintains databases of posts/attachments/etc...? Also, just remembered something about being able to 'run' FB code from within a webpage... would be nice to have a program posted and instead of copy/paste into an editor, just 'run' it from the browser whether or not FB was installed on the machine in question.... tricky feature!

BTW: I just noticed the "bug" "commit" "commit=" buttons at top of the post window.... that stuff looks similiar to GitHub stuff... how is it used?
Post Reply