IMD 1.16: 29/05/2007 12:21:23 FOGCPM.026 --FOGCPM026FIND52 COMFIND52 DOC[ FTNOTE COM !FTNOTE COM"-02-00 86 FTNOTE14DOC#$%&'()*+,-./012FTNOTE14DOCJ3456789:;<-CPM026 DOCFTNOTE14INF =>JUKI BASW?@ABCDEFGHIJUKI DOC=JKLMNOPQPAIRX COMRPAIRX DOCSTUPSFORMATBASDVWXYZ[\]^PSFORMATDOC_`abPSJUST BAScdePSNCLUDEBASfghPSVALUESLRGijkPSVALUESSMLlmnPSWRAP BAS opqrPSDEMO SAMstuPSDOTCMDBASvPSRJ COMwxyz{|}~PSRJ COM#PSRJ DOCePSRJ BASPSRJ BASThis is the disk name. S->FIND v52 Copyright (c) 1984 by Irvin M. Hoff $->$++ No file named  ++ $Enter String -->$@ @\$. . $ !9" 1 ] :Q:?y:QOo&6ʹ L !\#~ʥ ʒ?’2s#~ ¦#a ?à^]  :no&6!ʹ !YR !YR à J!]~6 # >.!e~6 1#%9] n:\  \d> ʤ|ʤN#U?UGyaڋ{ҋ_U#~ O*~#|I–:]N³!R !4 ~# ¶:\ *q}"o>l  <' ]  u!   w# z] n*q}8"o>l , <Z] n++ No file name given ++ Examples of how to use: B>FIND MAST.CAT B>FIND MAST.CAT MOD B>FIND MAST.LST MOD|BYE B>FIND MAST.CAT \M7 B>FIND MAST.ASM CAT[N] B>FIND MDM???.ASM M7 B>FIND FIND.ASM _SPHL B>FIND *.* SPHL B>FIND MAST.CAT .A?M B>FIND MAST.CAT MDM >FILE.TYP If no string is included, one will be requested. (This permits a search for lower-case only characters.) A '|' allows several strings to be used at the same time. A '?' is used for "any character" at this position. A '\' fakes a line feed, looking only at the start of a line. A '_' fakes a tab character. >FILE.TYP makes a disk file. Use [N] or [n] to display line numbers. $4] n ++ need [N], [n], [N or [n to print line numbers ++ $:\,* ++ ABORTED ++ $ ++ NO DIRECTORY SPACE FOR DISK FILE ++ $ Done $ ++ NO DISK SPACE FOR DISK FILE ++ $++ File read error ++$++ FILE WITH THAT NAME ALREADY EXISTS ++ $ ++ CANNOT CLOSE THE DISK FILE ++ $ !#~ʲ >U +~ i 6#6#~.ʑ ʲ l .ʑ 2\l #~.’ # ~#.ʗ ʲ ʗ [ʲ — ~#[´ ~N n++ 62]ô x 2h2|:{ >2{|!\ a :\2!|\ a i 8 !\ a i !|\ a \<7=Ɓo& a ] a 2hx~# a *o*q}| !"q*o{zҹ !L ¯ *q"qÁ ] !"q!L*q#"q^#V#N#Fx #~G#~#fo>x  }ƀo|g +~+w+++ #~g}o|g~ +p+q^H :\{l 4 #~$R  \FIND51 $$$ [N] or [n] to display line numbers. $4] n ++ need [N], [n], [N or [n to print line numbers ++ $:\,* ++ ABORTED ++ $ ++ NO DIRECTORY SPACE FOR DISK FILE ++ $ Done $ ++ NO DISK SPACE FOR DISK FILE ++ $++ File read error ++$++ FTOPIC: FIND52 DATE : 01 NOV 84 FROM : IRV HOFF Overview: FIND5 allow th use t ente characte strin (o multipl strings fo whic h i searchin an t specif fil (o grou o files i whic t search Whe th strin i found th entir lin o line o whic th strin i locate i displayed o printed o writte int repor file Th us o wildcard i th searc strin an fil specification allow muc leewa an flexibilit i use Ingenuit i strin findin ha application i cullin catalogue an lists i constructin compute progra cros reference an eve assist i th manipulatio o tex files Details of use: FIND52 locate string o character i file the display th entir line(s i whic tha strin wa found I ca b use wit wildcard i th nam o file t b searche t loo throug numerou file automatically searchin fo particula combinatio o characters I i especiall usefu wit MAST.CA o MAST.LS catalo program t se wha disk(s progra migh b on I woul sho ho man copie o name fil wer available permittin "housecleaning o extr programs I i ver convenien t us whe updatin newe version o files t locat version n longe neede tha hav simila name whic ca no b erased FIND5 ha som spee advantage ove usin norma edito "search sinc i display eac line rathe tha merel stoppin eac tim th combinatio appears (Som editor woul no convenientl allo har cop printin o "search results. FIND5 ca optionall mak ne dis fil fo late printing etc Usin progra lik LIST wit suc dis fil woul the permi paginate listin o th results wit pag numbers date heading etc.. Yo wil likel wis t kee FIND52.CO o a archiv disk the renam t FIND.CO o you catalo an utilit disk t simplif typin th complet nam (o eve rememberin th curren version). NOTE Ther ar specia character available in the string area. These fake control characters that normally cannot be typed: _ = tab key (underline) ? = any character \ = line feed (reverse slant) for finding strings starting at the beginning of a new line Examples of how to use FIND52: 1) B>FIND Displays a short "built in" instruction guide. 2) B>FIND ? Same as 1). 3) B>FIND HELLO.ASM Prompt fo strin t find I strin i i lower-cas i wil displa line whic contai onl th sam lower- cas chars I strin i upper-case wil sho al line havin th string whethe upper-cas o lower-cas o mixe case. 4) B>FIND MAST.LST MODEM Typica us o th program Display al line wit the sequential characters MODEM or modem. 5) B>FIND MAST.CAT _MODEM Usin th "_ (underline characte fake ta key Just those lines with "(TAB)MODEM" or "(TAB)modem" are shown. 6) B>FIND FILE.ASM \M7 Usin th "\ (revers slant fake L character Thi allow string appearin onl a th firs o a lin t b found I thi exampl al line indicatin file startin wit M woul b found whil withou th '\' al line containin M a an locatio woul b found I lookin i fil wit grou o messages al 'To coul b foun vi '\TO an FIN woul onl loo a th star o th line O al file i MAST.CA startin wit 'M coul b foun wit '\M' etc B includin L i th searc string FIND5 ha positiv capabilit t b restricte t findin string o character know t appea a th beginnin o line (Jus followin L fake b \) 7) B>FIND MAST.CAT MOD|BYE Usin th "| (vertica bar characte permit concurren search/displa o severa string o characters I thi case al line containin eithe MO o BY (o sam string i lowe case wil b displayed. 8) B>FIND *.ASM HELLO Wildcard ma b used I thi case th nam o eac file is printed prior to being searched. 9) B>FIND MAST.LST .A?M '?' may be used as a wildcard in the search field. 10)B>FIND HELLO.DOC MDM712[N] or [N or [n] or [n I [N i included lin number wil b added Thi i simila t usin PIP.CO an includin th [N option excep th lin number show her ar thos containin th requeste string 11) B>FIND MAST.LST MDM7 (CTL-P) control-P to operate printer Turn th printe o t mak quic har cop o results I paginatio i needed/preferred mak dis cop an us norma paginatin progra lik LISTT. 12) B>FIND MAST.CAT .COM >NEW.CAT the > indicates disk file dis fil ca b made usin th '> character (Thi outpu designato i use t isolat th strin area permittin space t b use i th search string.) 13) B>FIND HELLO.DOC process the file >FILE.TYP[n] An ASCI strin ma b searche fo includin string wit space betwee words Thi exampl show phras wil b searche fo an dis fil wil b produce whic wil sho th lin number o eac lin i th original file which contained the search phrase. GENERA COMMENTS ---------------- Thi progra i especiall usefu wit th MAST.CA catalo progra a i ca fin file wher onl fe character ar used Fo instanc th use know h ha som mode program calle MODEM o MDM o some-thing s h look for: A>FIND MAST.CAT DEM7|DM7|MOD H ma als wan t fin al file wit .ASM .AQ an .CO s h ca mak ne dis file: A>FIND MAST.CAT .ASM|.AQM|.COM >CAT.NEW H coul the us XCA t mak cross-referenc listing althoug i wil b smal nuisance: 1) Rename the existing MAST.CAT temporarily to ZMAST.CAT 2) Rename CAT.NEW (or whatever name was used) to MAST.CAT 3) Use the editor to put at least () for an "ignore file" at the start (XCAT cannot work otherwise). 4) Use XCAT which makes a file named MAST.LST. 5) Rename all files involved to whatever the user prefers, restoring the original MAST.CAT file. Addin lin number t th result (th origina fil i no modified onl read i occasionall beneficia sinc i show wher i th fil tha lin i located Thi ca b usefu fo findin error i assembl leve sourc cod tha ar har t fin wit a editor o t sho th concentratio o certai group o character i file. FIND5 ma als b use wit addres file o larg messag banks t fin al occurrence o simila names o simila streets o simila cities purchas dates produc names etc etc etc (I thi cas th '\ characte t loo onl a th beginnin o ne lin i frequentl o value. Th abilit t mak dis fil (plu concurren searchin fo variet o differen string separate b '| character) give FIND5 ver powerfu feature Fo example th abilit t outpu t ne fil ever lin wit matchin strin open u th possibilit o cullin dat file o mailin list t writ ne lis includin onl specifie zi code o cities - Irv Hoff Adde Note o us o FIND52 with text files: FIN i ver usefu t chec fil fro th outsid fo ke word prio t explorin wit a editor Fo example i yo hav fil o abstract i whic yo thin ma b materia o interest yo ca tr ou fe ke word t se i yo ar gettin an hits I th fil (o multipl files! searche b FIN yield n result fo you ke wor check ma no b wort browsin wit you editor Positiv result wil tel yo whic fil t g into an wher t look Whe operatin o WordSta tex file whic hav bee re- forme o wor wrapped b awar tha WordSta wil hav se th hig bi o th byt representin th las lette o ever word Enterin FIN searc string withou th hig bi se wil no mes wit fil whic include suc hig bi se characters I yo thin th fil yo ar searchin i WordSta file tr searchin wit wil car i th las positio o word tha is searc fo "MBASI? instea o "MBASIC, searc fo "edito? instea o "editor. O bette yet re-se th hig bit i th fil t b searche b filterin th file Usin CP/M' PI utilit wit it [Z paramete t cop th fil wil d th tric nicely WordSta wrap line wit "soft carriag retur (8 hex instea o regula carriag retur (0 h) Dependin o you system displa o suc line b FIND52.CO ma b irregular I suc case simpl cur i t outpu th fin result t dis file which can then be read with WordStar. Anothe WordSta oddit i th specia linefee a th en o page Whe searchin fo lin beginning b includin th fak LINEFEE ( character i th searc string remembe tha WordSta put "soft (modifie t 8 hex L a th en o th las lin o ever pag an thi wil no b found S searc strin whic happen t fal o th firs lin o pag i WordSta documen fil wil no matc searc strin entere wit th precedin (fo example "\edito?") Again convertin th WordSta fil t straigh ASCI prio t searchin wil yiel exac matches Additio o th capabilit t outpu line foun t fil o thei ow make thi lates FIN utilit tha write ca us ever day Fo example i WordSta draf not file on write put brie titl o ever importan note Thos title ar configure a WordSta "doubl dot commen lines (WordSta doe no wra thes line s consequentl the wil alway b pur ASCI an displa nicel wit FIND. FIN ma the b use t locat al line startin wit doubl dot an lis the t ne file Fo example FIN NOTES.00 \. CONTENTS.00 wil locat an reproduc al titl line i th fil NOTES.001 listin the i fil CONTENTS.001 WordSta ca the b use t edi th origina fil an th collecte title ca b rea i a th to o th origina fil a a instan tabl o content t ai searchin fo stuf dow i th middl o wherever FIN ca als b use t mak "Collecte Table o Contents fo numbe o file i th sam series NOV-1 NOV- 2 NOV-3 etc. (FIN NOV*. \. NOVINDEX) Doe th jo superdupe fast Thank t Ir Hof fo th provisio o hand tool th man use o whic ar stil bein discovered --Dick Ezzard  wil alway b pur ASCI an displa nicel wit FIND. FIN ma the b use t locat al line startin wit doubl dot an lis the t ne file Fo example FIN NOTES.00 \. CONTENTS.00 wil locat an reproduc al titl line i th fil NOTES.001 listin the i fil CONTENTS.001 WordSta ca the b use t edi th origina fil an th collecte title ca b rea i a th to o th origina fil a a instan tabl o content t ai searchin fo stuf dow i th middl o wherever FIN ca als b use t mak "Collecte Table o Contents fo numbe o fil*+%"H%"F%"D " " "y 6"C+6+!^6 F+N+<!* !!9~#ʗ RO"k'k +}|+#~ʂu6#~#<ʷ>!4R6#6*! * |ʴ!ͯ"r! ͯ" R Can't open > or < file.$èw*6 )! 9!"6ɟD*:B<*C 2B ́F  €> _*C~+#4N s> > !+:EºF2B_~ý   > G ʘG!* ͟> !+}  > _con:rdr:pun:lst: ==_~O7 !"# !  #¾i& ~º!h~#~#F6%pw6237!9Ly=S>wD<!gs 6#6 ~+|s#r{{ ڟ!+#^{!!Pw#w!g~<6 !|~r!N!nL}*eyb>w#%!=)${=Sbtx h&{ !~!nN#F{p+pH#x¯ ڽ+!9~ !~b!5> 6> *e w`i#Q᯾%,!$|!!9n&:ʟɯ2>[!9L):|!PwL#4!^w>2>2-:Ecx:-O”! DMi:- !Write error - Disk full $`i7.!9~=+SV+^+F+N "I> w+ w w##w w #~+:&~##K@~#.7K&*I++Kw#=a O! ~_#V!$r+sbk#|}o|g}o|g}o|g|!,|}!­­,ɯ|ʙ!|}!-z{!,zz{!-|!|g|}! -ɵz{!-||g}o).{ozg+|/g}/o~og~#fos#rN#F#xr~#~#[[`iDM!z>‚S\))Ҋ =‚ɯßz>|>MD!x<³z>ڸjS\>))#  =¸>>#]BJ.DOC.NOT.PRN.D#C.N#T!9FA !9FZ͓< !9Fa9 !9Fz͓͓I !M !;!96 !9Fsͯt !9F͓ͯˆ !9F͓ͯʥ !9!9F}U !9F#| !9F&}o}!9F| !96-!9F| !96 !9F3!9!9FN }ͯ !96 !9F|D !9!9FN }!9F|m !9FN ! ͹m T !9F0Š !9F9͓ʕ !!9F0² !9F9͓ !9FÓ !9F s!9FÓ ;!9!9FN }ͯ !9!9! }}!9F|B !9!9FN }!9F|f !9!9FN }!9F|ʏ !9FN ! ͹ʏ v !9F0¬ !9F9͓ʸ !3!9F0 !9F9͓ !9Fõ !9F0 !9F9͓. !9F s!9Fõ !9Fds!9F s!9Fõ ;!9!9L!9Lͯ}!͛ʭ ! B!?!9L!?ͨ!9F3!@9* * * * * * * * * * * !9:G#:G:G4}!" !" * 4V D * #" + * )!96#6: !B!?!BB!?:G ‹ :G ͓ :G͓¯ :G͓ :G͓ :G͓ :G͓ :G͓ :G͓:G͓-:G͓C!jB!?ͨ!9Lc!{B!?ͨ!96!" !9!9!9!9!9!}}}}}!96-!9LA!9LLF|%!9LL##F|!9!9LL#F}͓ͯ"!B!?!B!?ͨA!9!9LL* #" +F}͓A!9F|i!9F͓ͯx!96>!9Fͯʓ!9F͓ͯʢ!96>!9Fͯ!9F͓ͯ!9F͓ͯ!9F͓ͯ!9F͓ͯ,!9!9Fͯ! &!9F}>!9FͯK!9F͓ͯ_!9F͓ͯs!9F͓ͯ‡!9F͓ͯ›!9F͓ͯ¯!9F͓ͯ!9F|!9!9F}!9F|!9!9F}!B!?!9F!ͨ͟>!B!?!9F!ͨ͟%!9F|W!9F͓ͯʂ!B!?!9F@!ͨ͟!9F|ʜ!9F͓͓ʰ!9F͓͓!9F͓͓!B!?!9F!ͨ͟!" !9* !9* !9* !9* *  +!?!9L##L* F}}}}*  q!9L##L* #" +F͓!9!"A!9!"A!9!"A!9!B"A!9#F|!~9!9F}!~96!9!9!9F|!B!Bd }!9F|8!9!9!9F|,!B/!Bd }!9F|†!9!Bͯ!͹p!B!?ͨ!9!9!Bd }!9Fͯʩ!9!9!Bd }!9Fͯ!9F͓ͯ!9!9!Bd }!9Fͯʻ-!B!?!9!?!B!?!B!?!B!9F?!B!9F?!B!9F?:G1!9F͟!B!9F?:G0!9F͟!C!9F?:G0!9F͟!C!9F?!" :G*  * #" ! !9F͟!C!9F?!C!9F?* " !" * * eX* #" >* * 6N* " !" * * ʝÐ* #" v* * 6Æ!" " " !" !9!9!}}!9!9!9!9!9!9!9!}}}}}}}!96 !c" !96!9!9!9FN }!͹}!9F|c!9F!9FN :G͉͛}!9!9FN }!͹+c!9Fͯʳ!9Fͯ°!9F͓͓ͯ!9!9FN &}_o}!9!9FN &}_o}!96!9Fͯ!9F͓ͯ!LC!?!9!9FN }ͯF%!" !~9F|ʊ!9!9!9F}}!9#!9#!:}}!" !9* !9* !9F_ʾ!9F&}_o!9F}}!9!9FN }* #"  !9F͓͓!9F ͓Š!9* !9* !}}!9!?!B!?!9!"A!9!"A!9F!9F!9!9!Bd }!9!9!Bd }!9!9FN }!9!9F!9F͛!9FN :G͓͛}!96 !96!9Fͯ#!9F͓ͯN!9F " N* +" !96!9Fͯm!9F͓ͯO!9!9F }O!9F!9Fʵ!9!9F}!9!9FN }!͹I* #" +* !9F}!9F|!9F#}!9F!9F͛I* * F!_C!?!96Y-õ!96!9Fͯn!9F͓ͯʧ!9!9F }ʧ!9!9F+}!96!9Fͯ!9F͓ͯ=!9F " =* " !96!nC!?* !P?!uC!9F?* !9FP?!zC!9F?!9Fͯ\!9F͓ͯ!9!9F }!9F!9F!9F|ʢ!å!!9F4!9F!96P!96A! !9F͟!96!9Fͯ!9F͓ͯʊ!9!9F }ʊ!9:G#:G!9F4}!96!C!9F?!9F!9FP?! !9F͟!9Fͯʩ!9F͓ͯS!9F|!9F͓!9F!9F!9F##!9F4}P!9F!9F!9F|!!!9F4P! !9F͟!9F#}!9F|!9F!9F͟!9Fͯʓ!9F͓ͯ!9Fͯ!9Fͯ!9F͓͓͓ͯ!9Fͯ!9F͓͓ͯ3!9Fͯ0!9Fͯ-!9F͓͓͓ͯʟ!C!?!9F!͟!9F!͟!9F|ʁ!C!?! !͟!C!9F?!9F!9F͟!9F!9F͟!9F|! !9F͟!9!9FN }!9F͟!9F͓+:G!9F͛!!9F|R!96!C!?!9!9FN }!9!9FN }:G!9F͛ʚ!9F͓[ !9F+|? !9!9F}!9FZ!9F}!9F}!9F)!9L|* !C!?!9F!͟!96Y-!9F)!9* Q!9! }!9F͟!!9F!9F͛| !9F͓ʦ!!9FN !9F͹ʟ æ!!9!9FN }!9FZ !9F} !9F}!9F++ͯ!!9F)!9L͓ͯ.!!C!?!9F!͟Y-!9F)!9L!9FP?!9F)!9Ldx!! !9F͟!9F)!9L ʣ!! !9F͟!!C!?:G@!͟!9F!͟!96Y-+:G!9F͛"!9F!9F͛"!9F͓͓ͯQ&!9!9FN }:G!9F͛V"!9F͓ͯ&!9Fͯ"!C!?!96Y-!96!9!9FN }* #" +* !9F}!9Fͯ"!9!9F}:G!9F͛"!9F͓ͯ"!" * #" * #!9F!1͓͛.#!9F!1͓͛:#!" !9F* |^#!9F* cʦ#!9* !d͔0}!9F͟* #" +* !9F}*  #!9* !d͔! ͔0}!9F͟* #" +* !9F}!9* ! ͔0}!9F͟* #" +* !9F}* |S$!9!9FN }!9F!9F͟* #" +* !9FN }*  ʱ$! !9F͟* #" +* 6 * c$* ͓ͯ$! !9F͟* #" +* 6 !9!9FN }!͹&!96!9F!9F͛4%!9F͓ͯd%!9!9FN }:G͛d%!96&* #" +* !9!9F}}!9F| %!9F#}!9F|%* #" +* !9!9F}}!9F|%!9F#}* * &!_C!?!96Y-$N&!9F!9F͟!9F!9F͟!9!9F}+!9Fͯl&!9F͓͓ʇ&!9F!9F͟!9!9F}!9F|ʰ&!9F͓ͯʼ&!96X!96!9F|+!9F#}!9!9F}!9F|'!9F++!9F͓J'!9F!9FJ'! !9F͟!9F#}'!9F|ʌ'!9F!9F!9F|y'!|'!!9F4͓ʾ'! !9F͟!9F#}!9F+}J'!96!9F|'!9F!9F!9F++͓(!9F!9F͓(!9F͓/*!9F##}!9F|N(! !9F͟!" :G* ʉ(q(* #" T(!9F!9F͟g(!9F|ª(! !9F͟! !9F͟!" " !9F|(!9F!9F͟!9F!9F)* * ͓ʉ)* * F|7)!9F#}!9F+}!9F|M)!9F͓ͯh)!9F!9F͟* #" +* F!9F͟(* * ʺ)* #" +* * #" +* F}É)* " * * )* * F͓͓)* #" +* 6)!9F/*! !9F͟!9F#}!9F+})!9F!9F+!9FͯX*!" !9!9!}}!nC!?* #" !P?!C!9F?!" :G* *** #" à*!-!9F͟÷*!C!9F?* !9FP?! !9F͟!" !9F!9F.+* * ͓u+* * F!9F͟* #" +* F|r+!9F#}+!" * * ʢ+Õ+* #" {+* * 6Ë+!" !96!9F!9F+E*c!9F|@-!9Fͯ$,!9F!9F!9F++$,! !9F͟!9F#}+!9F|E,! !9F͟!" :G* ʀ,h,* #" K,!9F!9F͟^,!9F|¡,! !9F͟! !9F͟!" !9F|,!9F!9F͟* * F͓,* * ͓-* #" +* F!9F͟,!9F|@-!9F!9F͟!9F|Y-!D!?!D!?!9!?!9F!9F+|»-!D!?!9F!9F!96!9F|§1!.D!?!9!?!B!?!9!9!9F}}!9!9F}!96!" !9F!͹I.!9F!͹͓1!9!9F}c!9F!9F͛ʉ.!9F͓͓ʚ.!9F#͓͓.!9F!9F͛¿.!9F͓͓ͯ.!9F͓ͯ/!9F!9F͟!9!9F}!9!9F}:G!9F͛R/:G!9F͛O/!9F͓͓ͯʹ/!9Fͯt/!9!9F}!9F!9F͟!9!9F}!9!9F}!9!9F}/!9F!9F͟!9!9F}!9!9F}!9F!9F͛0!9F͓ͯ,0!9F&}o:G͓͛0!9F!9F͟!9F!9F͟!9!9F}!9!9F}!9F͓ʠ0!9F#͓͓ʽ0!9!9F}0!96!9F!9F͟!9!9F}!9!9F}* #" *  1!.!͟!" *.!D!?!9!?!ED!?!!9F͟!9F!9!?!!9F͟!9F!9ͺA!9!9jA!9F|-7!HD!?!9!?!B!?!9!9F}!9!9F}!" !9!9!9!}}}!9!9F}!9!9F#͓X2!9F͓͓}!9F|ʏ2!9F!9F:G͉͛}!9F͓ʫ2!9F#͓͓ʠ6!9!9F}c!9F!9F͛2!9F͓ͯ2:G!9F͓͛)3:G!9F͛&3!9F͓͓ͯ>3!9!9F}!9F!9F͛e3!9F!9F͓͛|3:G!9F͓͛ʧ3:G!9F͛¤3!9F͓͓ͯʹ3!9F#}!9F!9F͛3!9F͓ͯ3!9F͓b4!9Fͯ 4!C!?ͨ!9!9F}!9F!9F͟!9F!9F͟!9!9F}!9:G}!9F!9F͛ʅ4!9F͓ͯD6!9!9F}!96!9!9F#͓4!9F͓͓}!9FͯH5!9F+}|4!C!?ͨ:G!9F͟!9!9F}!9!9F}!9!9F}5!9F!9F͛5!9!9F}:G͛5!9F+}ͯ5:G!9F͟!9!9F}!9!9F}!9!9F}!9F!9F͟!9F!9F͟!9!9F}!9!9F}!9FͯD6!9!9F}!9F!9F͟!9!9F}!9!9F}* #" * ʝ6!.!͟!" Ï2!9F|ʹ6!D!?!D!?!9!?!!9F͟!9F!^D!?!9!?!9ͺA!9ͺA!9!9jA!9F|>!" !" !9* F!.͹i7* #" I7!9* !9* !}}!c" !9!"A!9!"A!9!9!Bd }!9!9!Bd }!9!9F}!9!9F}!9" !9" * " !9!9F}ͯ8!9!9F&}_o}!9!9F&}_o}!9Fͯw8!9F͓ͯʮ8!9F " ʞ8* " ë8!jD!?8!.!9F͟!9F!9F͟!9F!9F͟)9!9F#ͯ9!9F͓ͯ9}>)9!9F!9F͟!D!?* !?!B!?!96 !9!9!9!}}}* " !9!9F}!9F͓ʧ9!9F#͓͓,>c!9F!9F͛9!9F͓ͯ9!9F͓ͯ;!9F ͓¸:!9* !9* !}}!9!?!B!?!9!"A!9!"A!9F!9F!9!9!Bd }!9!9!Bd }* " 7! !͟!9!9F}!9!9F}!9" !9" )9!D!?!9!?!!9F͟!9F!ED!?!9!?!!9F͟!9F" " " " " " " " " " " !9!9LF|O?!9L#Q+F!9L͟?;!96!9Lʉ?!-!9L͟!9LsQ!9L'?!9L!'͔0!9L͟!9L!'͔Q!96!9L@!9F|?!0!9L͟;@!9L!͔0!9L͟!9L!͔Q!96!9Ldk@!9F|h@!0!9L͟ä@!9L!d͔0!9L͟!9L!d͔Q!96!9L @!9F|@!0!9L͟A!9L! ͔0!9L͟!9L! ͔Q!9L0!9L͟3!9LF|@A!9L#Q"A!9L#Q+!9L#Q+F}|iA@A!9!89L!9A!:9L!9A!!A!!9A!69!9!&9L!9A!!A!!9A!$9o&% ! can't open FTNOTE 1.4 :: (c) E.Meyer :: 84/08/27 ===================================== ! bad user patch! no file ! bad option -?.$$$rbr! NOT file existswbwFormatting , ^C to abort... page 1.IG ===== Formatted by .MT .HM .MB .OP .HE# .IG ===== ---> For PRINTING ONLY; do not reformat! ===== Chaining to file ! buffer full page .PN .OP .PL ? ignored .; bad argtIG Scanning ahead... ! duplicate ref ! not set: ref ! bad ref ^ ! missing notes.IG page ? extra notes Closing Scan complete. Extracting notes from , Replacing notes into , deleting ? ignored .FN; bad argt Numbering notes in note   FTNOTE.DOC ---------- Documentation for FTNOTE.COM (C)1984, Eric Meyer (Version 1.4 - 84/08/27) Requires: CP/M operating system and WordStar(tm) This program and its documentation are released to the public domain. They may be used, copied, and distributed by all as long as NO charge is involved, and NO unauthorized changes are made. --------------------------------------------------------------------- I. INTRODUCTION FTNOTE.COM is a formatting utility for WordStar files. Its main function is to allow the printing of WordStar documents with page-bottom footnotes, but it does internal page referencing and improved block formatting as well. FTNOTE will automatically move your footnotes into and out of your text file; number them for use as end notes; or produce a printable file with them at page bottom. FTNOTE is an effective but simple program. It does NOT attempt to duplicate the existing capabilities of WordStar: editing, justification, or printing. It is a utility to be used in conjunction with WordStar. FEATURES: * simple, natural file format * automatic separation of text and notes * will produce end notes or footnotes as desired * automatic footnote numbering * numbering can match up across multiple files * page-mode or continuous footnote numbers * long notes will continue on next page * many formatting options allow flexible results * automatic internal page reference numbering * useful improved figure-block formatting * can be run FROM WORDSTAR with Main Menu "R" command TYPICAL USE SEQUENCE: (1) Create the source file (text with notes) WHATEVER.DOC (2) Extract notes to separate file WHATEVER.NOT: run FTNOTE WHATEVER -E (3) Combine the DOC and NOT files for printing: run FTNOTE WHATEVER (4) Print or Mergeprint the output file WHATEVER.PRN --------------------------------------------------------------------- II. THE COMMAND LINE: MODES, OPTIONS, FILES SYNTAX: FTNOTE [D:]FILENAME -mode (utility modes) or FTNOTE [D:]FILENAME [options] (formatting) Do not include the filetype on the FTNOTE command line. FTNOTE will look for files (of filename FILENAME) with the filetypes DOC, NOT, D#C, N#T, and PRN as appropriate. (See FILE USAGE.) EXAMPLES: ftnote dissert -e extracts DISSERT.NOT from DISSERT.DOC ftnote art1 #an^ combines ART1.DOC and ART1.NOT into ART1.PRN for printing (see options below) In the following instructions, the phrase "the DOC file" means the file with your specified name, and filetype DOC, i.e. ART1.DOC. "The NOT file" is then ART1.NOT, etc. UTILITY MODES: If you wish to create the needed NOT file by extracting footnote text from your DOC file, use the "-e" mode. If you later wish to replace the footnotes into the DOC file, which makes major editing of the document a lot easier, use "-r" mode. If you wish to have end notes instead of footnotes, once you have the DOC and NOT files separate, the "-n" mode will simply number the notes in each sequentially, producing files D#C and N#T. This mode does NO other formatting. The default mode is formatting mode, which combines the DOC and NOT files into a PRN output file with notes at page bottom, etc. Most of the following instructions apply to the preparations for or use of this format mode. FORMATTING OPTIONS: If you are ready to format (combine the DOC and NOT files into a PRN file ready to print), the option string may contain any of the following: (1) the character "#". (2) the character "^". (3) any ONE of characters =, ~, _, @. (4) any PAIR of characters A, N, Q, W, E, R, Y. These allow you to choose the following optional features. (1) By default, footnote numbers run continuously from 1 to 99 (or 999). However, if you use the "#" option, you can instead have the numbers start over at 1 on each page. (2) By default, footnotes are printed at the bottom of the page even when the text ends higher up. Use the "^" option if you would prefer the notes to be right under the text regardless. (3) By default, page bottom notes are preceded by a blank line followed by a short line of dashes (-). The length of this line can be changed via a user patch, below. You can change this to a line of =, ~, or _ if you prefer. (For _, this line will precede the blank line, so it doesn't collide with footnote superscripts.) If you want no visible line, use @, and you will simply get two blank lines. (4) You may choose to have footnotes print out in a different print style than the body of the text. If you have a set of ^P codes installed in WordStar to use such a feature of your printer (for example, compressed print mode on a matrix printer), put the appro- priate pair of letters in the option string. For example, if you have set up ^PA to enter compressed mode and ^PN to return to normal print, use "AN" in the option string. (Reme mber to format the note file accordingly; use wider margins for smaller print, so the text and notes will have the same physical line width in the PRN file.) FILE USAGE: Be sure to give your original source file the filetype "DOC". All files to be used by FTNOTE must be on the same drive: the one you specified on the command line (or the logged drive). Here is a summary of FTNOTE's file usage. Note that in order not to fill up your disk, it does not create BAK files. MODE INPUT FILE(S) KEPT? OUTPUT FILE(S) ---- ------------- ----- -------------- -n .DOC, .NOT yes .D#C, .N#T -e .DOC NO .DOC, .NOT -r .DOC, .NOT NO .DOC (format) .DOC, .NOT yes .PRN Always keep a backup copy of your document and notes, in case something goes wrong. Note that in the "-e" and "-r" modes, FTNOTE replaces or erases the existing DOC and NOT files when it is finished. (Unless it aborts, in which case it will merely leave a ".$$$" file behind.) To protect your existing notes, the "-e" mode will refuse to run if a NOT file already exists. Make sure you always have enough space on the disk to hold another full copy of your entire document, whatever mode you are using. When using format or "-n" modes, every DOC file must have its corresponding NOT file, even if it makes no footnote calls! Running "-e" on a DOC file with no footnotes will produce an empty (0 K) NOT file, which must exist for format or "-n" mode to work. You can print the PRN file with WordStar or MailMerge, but be cautious about editing it. Don't insert or delete lines, or the page breaks will get misplaced. If you want to revise the document, edit the DOC file, and run FTNOTE again. Very large files are best broken up into manageable pieces (this is true even when not using FTNOTE). Output can be recombined using the .FI dot command, or page and footnote numbers can be made to mesh using the .PN and .FN commands to start each piece with the appropriate numberings. ------------------------------------------------------------------- III. USING FOOTNOTES FILE FORMAT: Unlike some commercial programs, FTNOTE does not use non-Wordstar type imbedded commands that disturb the appearance of your text file. You can create your text just as you have in the past. Whenever you need to insert a footnote, a place is held for its number with two "##" characters. (When you want to start again with note 1, use "#1".) These must be enclosed within a pair of characters of your choice, called "delimiters". Typical delimiters are pairs of brackets "[##]" or WordStar superscript codes "^T##^T", or a leading space and a following period " ##.". You must use the same delimiters consistently throughout your text, but you may use a different set in the notes. The footnotes must be entered into the file following a (hard carriage return), typically (but not necessarily) the one that ends the paragraph in which they were called; and in the proper order. Each note must begin with another delimited "##" (or "#1") flush left. At the end of the block of notes, enter a "]" followed by a , and then continue with the text. You might write the file ART1.DOC like this (each "<" flag in Wordstar indicates a hard carriage return): | ...seafood derivatives in the native population (text) | as a whole. [##] This result agrees with recent | findings, as well as the classic study [##] of | Jenkins and Namabi. < ------------- | ##. This does, of course, vary greatly with the (block of | season. See Hirsch (1944), chapter XII. < notes) | ##. B. Jenkin and S. Namabi (1961), "Seafood in ------------- | the Native Population", JGH 7:156-78. ] < (more text) | On the other hand, fairly little is known... Note the use of brackets as delimiters in the text; a space and a period as delimeters in the notes; and the "]" ending the note block. Running FTNOTE in the "-e" (extract) mode will then remove all these footnotes into a separate file. (Alternatively, if you find it convenient, you may write them in a separate file yourself to begin with, as version 1.0 required. No closing "]"s are needed in the NOT file.) Now you have a file ART1.DOC which looks in part like this: | ...seafood derivatives in the native population | as a whole. [##] This result agrees with recent | findings, as well as the classic study [##] of | Jenkins and Namabi. < | On the other hand, fairly little is known... and you have a file ART1.NOT which looks in part like this: | ##. This does, of course, vary greatly with the | season. See Hirsch (1944), chapter XII. < | ##. B. Jenkin and S. Namabi (1961), "Seafood in | the Native Population", JGH 7:156-78. < Finally, running FTNOTE in "format" mode will produce the output file ART1.PRN, a non-document file looking something lik e this: |...found to be far greater than the average intake | | of seafood derivatives in the native population | | as a whole. [19] This result agrees with recent | | findings, as well as the classic study [20] of | | Jenkins and Namabi. | | On the other hand, fairly little is known | | of possibly similar practices in the neighboring | | | | ------------------------ | | 19. This does, of course, vary greatly with the | | season. See Hirsch (1944), chapter XII. | | 20. B. Jenkin and S. Namabi (1961), "Seafood in | | the Native Population", JGH 7:156-78. | Observe that the text will remain formatted exactly as it was in the DOC file, and the notes as they were in the NOT file. Note: if you are going to use "-n" mode for end notes, you MUST use "#1" in the corresponding footnote each time you use it in the text, or your end notes will be misnumbered. Use of "#1" in the notes is not required for format mode, but is recommended for consistency. THREE-DIGIT FOOTNOTES: With larger documents, you may find that you need the footnote numbering to continue past 99. It is now possible to use FTNOTE with footnotes up to 999: instead of using "##" (or "#1") as shown in the examples above, simply use "###" (or "##1"). If you do not need the larger note numbers, you will find that the two-digit form above will produce more attractive results. Note that whether you choose two- or three-digit footnotes, you must be consistent throughout your document and notes. ADVANCED TECHNIQUES: With a little ingenuity, you can get FTNOTE to handle a variety of format requirements that I didn't have in mind when I wrote it. Here are some problems people have had in the past. Example 1: FTNOTE requires footnote text to begin in column 1, but you want your whole document (text and notes) to print out with a ten-space left margin. Solution: write your file without the margin (all those extra spaces waste disk space anyway). Use a dot command, either .LM or .PO, to create the margin at print time. Example 2: MLA footnote style requires the first line of each footnote to be indented, and the number superscripted. Solution: use a fixed tab (^PI) and a superscript as your delimiters in the notes (e.g. ^I##^T). Then after formatting, edit the PRN file and change all ^I##^T to ^I^T##^T, completing the superscript toggles. Example 3: You want to take advantage of Figure Blocks, page referencing, etc, but you want end notes, not footnotes. Solution: Run "-n" mode first. (This produces a D#C file which has no "##" footnote calls, and a N#T file.) Then rename the D#C file to NEW.DOC, the N#T file to NEW.NOT, and format these with FTNOTE NEW. The NEW.PRN file will then be your final text, and NEW.NOT is the endnotes for it. -------------------------------------------------------------------- IV. PAGE REFERENCING The automatic internal page referencing feature available in format mode allows you to refer in the course of your text to a number of other locations in your text by page number. The two most common uses for this are in constructing a table of contents, and referring to figures and other references. FTNOTE allows 52 separate locations to be marked for this use; references may be made either earlier or later in the text. (This feature cannot be used to build an index; the number of markers is too small, and each should be set at only one location.) Page references are delimited by the control character ^P, placed in your WordStar text like any other control-P code, by typing ^P, then P. Referencing will not be invoked if no ^P is found in your DOC file. It is a two-pass operation, so it will double the formatting time for your document, if used. You will get a message "Scanning ahead..." when page referencing begins, and "Scan complete" at the end of the first pass. SUMMARY: To set reference marker A: ^PA^P (no adjacent spaces) To call for its value: ^PAAA^P (spaced normally) Page reference markers run from "A" to "Z", and from "a" to "z". To set marker "A", identifying a location for further reference, you enter the sequence "^PA^P" in your text between an appropriate pair of words, with NO intervening spaces: for example, "CHAPTER^PA^PIV. ASTRONOMY." You can now refer to the page on which "CHAPTER IV" occurred by asking for the value of marker "A", by entering the sequence "^PAAA^P" where you want the page number: for example, "Chapter IV...........page ^PAAA^P." In formatting, the marker setting "^PA^P" will be replaced by a space " ", and any marker references "^PAAA^P" will be replaced by that page number, giving for example "Chapter IV............page 29.", assuming the heading "CHAPTER IV. ASTRONOMY." winds up on page 29. Page references may be in a different file from the corresponding marker setting, only if the files are chained with the .FI command. Otherwise the attempt to reference a none xistent marker gives an error. -------------------------------------------------------------------- V. TECHNICAL DETAILS DOT COMMANDS: You should be aware that certain WordStar/Mailmerge dot commands work in a nonstandard manner with FTNOTE, and a few are not allowed. The nonstandard group are interpreted by FTNOTE, and often are removed from the PRN output file. These include: .PL will change the page length. (See PRINTER FORMAT.) It may occur only once, at the top of your DOC file. .HE, .PA, and .PNnnn, all have their normal effects, except that the default header is a blank line with page number at column 74. .CPnn will work as intended unless the text it covers includes footnotes, which may cause a page break earlier than expected. .LSnn will change the line spacing of the text in the formatted output, but will leave footnotes and Figure Blocks single spaced. When entering consecutive blank lines, remember that each one will be multi- plied by the current LS spacing. .FI NEWNAME.DOC, as the last line of the DOC file, will chain to a new pair of input files, NEWNAME.DOC and NEWNAME.NOT, while still using the same output file(s). Thus you can break a large document up into small pieces, and have the output combined properly upon formatting or numbering. The alternative would be to use the .PN and .FN commands at the beginning of each piece to match up the page and footnote numbers, and process and print each separately. .FI works in "-n" mode also; it is ignored by "-e" and "-r". Do not specify a drive; all files will be sought on the same drive as the original ones. (.LS and .FI are MailMerge commands, but you don't have to use Mailmerge for them to work, because FTNOTE is processing them itself.) The dot commands that are not allowed are those that would upset the vertical page formatting FTNOTE is doing. These are .FM, .FO, .HM, .LH, .MB, and .MT. (Note: the formfeed character ^PL should not be used either.) Upon encountering any of these commands, FTNOTE will issue a warning message, and suppress the command. (If you really know better, you can edit the PRN file: you will find the offending dot command with ".IG" stuck in front of it, which you can remove. But the result will probably be misplaced page breaks.) FTNOTE also offers two dot commands of its own: .FB (Figure Block) provides another formatting capability WordStar lacks. ".FB nn" will force the next 'nn' lines of text to print as a contiguous block at the top of the next new page; the current page con- tinues until full, in contrast to the .CP command. This block may, for example, contain the text of a table, or blank lines for a figure to be pasted in. At most a whole page can be reserved (Page Length - 1 - Header Margin - Bottom Margin, by default 66 - 1 - 3 - 8 = 54), so any larger value of 'nn' will default to one page. .FN (Footnote Number): ".FN nnn" sets the next footnote number to 'nnn'. This is most useful in combination with .PN at the beginning of a DOC file. (.FN works in "-n" mode also, IF it is the first line of the file.) WordStar itself ignores these two FTNOTE dot commands. PRINTER FORMAT: The default page format for FTNOTE is intended for standard 11" paper at 6 lines per inch, giving 66 lines per page. In this case FTNOTE actually prints 54 lines per page. You can vary the placement of text on the page by moving the platen and resetting top-of-form on your printer. If you want to use different forms, such as legal paper, the page length may be changed via the .PL command or user patch. If you have installed WordStar with a default page length other than 66, you should change the .PL user patch to get FTNOTE's page length to agree. When printing the PRN file, instruct WordStar to use formfeeds, if that is not your default. The size of the top and bottom margins may also be changed by user patches. These changes cannot be made merely by editing the dot commands that begin an existing PRN file: they affect the page length, and page breaks would be misplaced. CAVEATS: Don't try to put footnotes, dot commands, or ^P page references in the text of a Figure Block or a footnote. FTNOTE won't recognize them. Don't use the page reference code (^P) for any other purpose. Be sure to follow the instructions on FILE FORMAT above exactly. A small error could cause a note to be ignored, or a portion of your text to be misplaced. In particular, be careful not to misuse the "#" or "]" characters. If you see a problem in your output, a little experimentation should lead you to a solution. You must be in single spacing (^OS1) before entering footnote text. This should be no problem: since .LS can control line spacing, you should never need to use the ^OS command anyway. Be careful while using alternate print modes (including underline, italics, etc) in your document. If a page break occurs while the text is in such a mode, for example, any footnotes on that page, along with the next page header, will also appear in that alternate print mode. You may have to edit the PRN file and insert extra print codes. Proofread your output carefully! ---------------------------------------------------------------------- VI. FURTHER TECHNICAL NOTES USER CUSTOMIZATION: You can change several default parameters in FTNOTE.COM, if you wish, by using DDT, SID or equivalent to patch the following bytes: ADDRESS DEFAULT LEGAL RANGE DESCRIPTION ------- ------- ----------- ------------------------------------ 08D8H 23H (#) 20H - 7FH Footnote number character 08D9H 5DH (]) 20H - 7FH Character marking end of note block 08DAH 03H (3) 00H - 08H Lines between header and text (.HM) 08DBH 08H (8) 00H - 08H Lines left blank at page end (.MB) 08DCH 42H (66) 08H - 7FH Physical page length in lines (.PL) 08DDH 4AH (74) 01H - 7FH Column number for page number 08DEH 10H (^P) 01H - 1DH Control code for page referencing 08DFH 14H (20) 01H - 7FH Length of dashed line for footnotes Thus you can, for example, avoid complications in a text that contains many "#" signs by changing to "@" for your number marker character; or get more lines on the same size page by decreasing the .MB number. You can also change the filetypes used by FTNOTE, if for example you prefer "TXT" to "DOC". The default filetypes DOC, NOT, PRN, D#C, and N#T appear from address 08E0H to 08F3H. NO changes to the object code of FTNOTE.COM by the user are auth- orized outside the address range 08D8-08F3 provided for this purpose. ERROR MESSAGES: These are immediate error messages: ! no file (no file name specified) ! bad option X (illegal or contradictory format option specified) ! NOT file exists ("-e" won't run if there's already a NOT file) ! bad user patch (an illegal default value has been patched in) These are non-fatal warning messages; be aware that something may not be working as you intended. Abort with ^C if you wish. ? ignored .XX (unacceptable dot command) ? ignored .XX; bad argt (bad number in .CP, .FN, .FB, .LS, or .PN) ? extra notes (better check for missing references in text) These errors will cause formatting to abort; the PRN file will end abruptly where the error was detected. ! missing notes (there's no note body for a footnote call in text) ! buffer full (you probably forgot to terminate a footnote) ! duplicate ref X (you tried to set this marker a second time) ! not set: ref X (you tried to reference a marker that wasn't set) ! bad ref ^P$ (invalid page marker reference attempt) ! can't open MY.DOC (can't find (or write to?) the specified file) VERSION HISTORY: This program was developed on an Osborne Executive computer with CP/M 3.0 and WordStar 3.3, using the Software Toolworks C/80 compiler. It has been much improved since, largely in response to user feedback. Note: files created with earlier versions should be upward compatible, but not necessarily vice versa. [Exception: page referencing codes from versions 1.3x are not compatible with version 1.4.] 84/03/29 FTNOTE 1.0 8K The basic program, with "formatting" mode only. Options allow numbering and print mode control. Requires the user to write a separate file of notes. Offers .FB figure block command. 84/04/09 FTNOTE 1.1 10K Added "-e" and "-r" modes: note texts can be entered in the document, immediately following the "[##]" call, making writing (and editing) easier. Added the .FN dot command. 84/04/25 FTNOTE 1.2 12K Notes can be entered en bloc at paragraph bottom. Added "-n" mode for folks who want end notes. Allowed dot commands .LS and .PL. Options: vary line character; print notes up with text on short pages. NOTE ---> Version 1.21 corrected a bug in the page header. 84/06/14 FTNOTE 1.3 16K Better algorithm allows more flexible options for delimiters, fewer recognition errors. Added page referencing feature, .FI dot command. Several default parameters made user-patchable. NOTE ---> Versions 1.31-33 corrected minor bugs: more dot commands are now "acceptable"; last-line note calls no longer cause trouble. 84/08/27 FTNOTE 1.4 17K Allows larger page and (optionally) footnote numbers. Page ref- erence codes modified for larger numbers (no longer compatible with versions 1.3x). Footnote separator line options improved. Minor bugs associated with use of ".FI" and "#1" fixed. FEEDBACK: If you think you have found a bug in this program, or have some suggestions for improving it, please contact: Eric Meyer, 427 N. Washington, Bloomington, IN 47401. Phone (812)332-5018, CompuServe [74415,1305]. As said above, this program is free, and I hope you find it useful. However, if you would like to express your support for it, you may send a check for $10 to become a registered user: you will be notified of future revisions, and can order copies of the latest version in most common minifloppy formats for $5 each. -----------------------------------------------------------------------  FTNOTE 1.4 17K Allows larger page and (optionally) footnote numbers. Page ref- erence codes modified for larger numbers (no longer compatible with versions 1.3x). Footnote separator line options improved. Minor bugs associated with use of ".FI" and "#1" fixed. FEEDBACK: If you think you have found a bug in this program, or have some suggestions for improving it, please contact: Eric Meyer, 427 N. Washington, Bloomington, IN 47401. Phone (812)332-5018, CompuServe [74415,1305]. As said above, this program is free, and I hope you find it useful. However, if you would like to express your support for it, you may send a check for $10 to become a registered user: you will be notified of future revisions, and can ord FTNOTE14.INF ------------ Update information: FTNOTE.COM version 1.4 84/08/27 Version 1.4 incorporates several modest improvements over the previous version 1.33 of FTNOTE.COM. The DOC file has been updated accordingly. ADDITIONAL FEATURES: (1) Larger page numbers are now supported (up to 999). The page number reference syntax has been changed accordingly, and is no longer compatible with that of versions 1.3x. (2) Larger footnote numbers (up to 999) are now available as an option. (Old style numbers to 99 are still supported.) (3) The footnote separator line length can now be adjusted by a user patch. In addition, if the character "_" is used, this line will no longer collide with footnote superscripts. MINOR BUGS FIXED: (1) "-e" and "-r" modes now allow "#1" to remain in footnotes. Previously "-e" replaced "#1" with "##" in the notes. This has no effect on format mode, but caused misnumbered end notes, when "-n" mode was used. (2) The ".FI" dot command now looks for the specified file on the same drive as the original file. Previously it looked on the default drive, even if a drive was specified on the command line. (3) Attempts to set an already set page marker now generate the error message "! duplicate ref". Previously the original setting was simply overridden.  (2) Larger footnote numbers (up to 999) are now available as an option. (Old style numbers to 99 are still supported.) (3) The footnote separator line length can now be adjusted by a user patch. In addition, if the character "_" is used, this line will no longer collide with footnote superscripts. MINOR BUGS FIXED: (1) "-e" and "-r" modes now allow "#1" to remain in footnotes. Previously "-e" replaced "#1" with "##" in the notes. This has no effect on format mode, but10 CLEAR 20 ' 30 ' 40 NOO=54 : PN=1 : SPAC$=" " 50 ' 60 ' JUKI.BAS (C) 1985 by Louie Crew 70 ' 72 ' Not to be sold! Individuals may freely copy. 73 ' 74 ' For more information, contact: 75 ' 76 ' Dr. Louie Crew, English Department 77 ' Chinese University, Shatin, Hong Kong 78 ' 80 ' A Program to print stripped WordStar texts in Juki 6100's true 90 ' Proportional Spacing 100 ' 110 ' Here the program enters the default codes for printer 1 (Here a JUKI 6100) 120 TB=8 : WID=120 130 GOTO 300 140 ' -- 200 ' Here the program enters the codes for printer 2 (Here an EPSON) 210 ' 220 TB=0 : WID=80 230 GOTO 2000 240 ' -- 300 ' Here the program enters your addresses. 301 ' You will want to put your own information in the quotations 302 ' and then save the program thus altered. 303 ' 310 NAME1$="Name 1: Enter at line 310" 320 ADD1LINE2$="Enter this information at line 320" 330 ADD1LINE3$="Enter information at line 330" 340 ADD1LINE4$="Enter information at line 340" 350 ADD1LINE5$="Enter information at line 350 360 NAME2$="Name 2: Enter at line 360 370 ADD2LINE2$="Enter info. at line 370 380 ADD2LINE3$="Enter info. at line 380 390 ADD2LINE4$="Enter info. at line 390 400 ADD2LINE5$="Enter info. at line 400 410 ' -- 500 WIDTH 90 510 PRINT CHR$(26) 520 WIDTH LPRINT WID 530 PRINT 540 PRINT "Put a disk with manuscripts in Drive B: 550 PRINT "Then hit any key to continue 560 PRINT 570 PRINT "Type * to return to the SYSTEM" 580 PRINT 590 Z$=INPUT$(1) 600 IF Z$="*" THEN SYSTEM 610 RESET 620 ' -- 630 ' 700 PRINT "These are your files on drive B: 710 PRINT 720 FILES "B:*.*" 730 PRINT 740 PRINT 750 PRINT "Enter the names of up to 6 files you want to print followed by <> 760 PRINT 770 PRINT "Enter just <> to stop naming files. 780 PRINT 790 INPUT F1$ 800 F1$="B:"+F1$ 810 NO=1 820 INPUT F2$ 830 IF F2$="" THEN 2010 840 F2$="B:"+F2$ 850 NO=2 860 INPUT F3$ 870 IF F3$="" THEN 2010 880 F3$="B:"+F3$ 890 NO=3 900 INPUT F4$ 910 IF F4$="" THEN 2010 920 F4$="B:"+F4$ 930 NO=4 940 INPUT F5$ 950 IF F5$="" THEN 2010 960 F5$="B:"+F5$ 970 NO=5 980 INPUT F6$ 990 IF F6$="" THEN 2010 1000 F6$="B:"+F6$ 1010 NO=6 1020 INPUT FILE$ 1030 ' -- 2000 ' 2010 ' PRINT ROUTINE STARTS HERE 2020 ' 2030 PRINT 2040 PRINT "1 = BEGIN PRINTING 2050 PRINT "2 = Address envelopes 2060 PRINT "3 = Shift to Printer No. 2 (Epson) 2070 PRINT "4 = Alter other defaults 2080 PRINT 2090 PRINT 2100 PRINT 2110 P$=INPUT$(1) 2120 IF P$="1" THEN 3000 2130 IF P$="2" THEN 3000 2140 IF P$="3" THEN 200 2150 IF P$="4" THEN 14000 2160 PRINT 2170 PRINT "Try again." 2180 PRINT 2190 GOTO 2110 2200 ' -- 2210 ' 3000 ' FILE ORDER FOR PRINTING IS RE-CALLED 3010 BUMP=0 3020 IF F=>1 THEN 3050 3030 FILE$=F1$ 3040 F=1 : GOTO 3200 3050 IF F=>2 THEN 3080 3060 FILE$=F2$ 3070 F=2 : GOTO 3200 3080 IF F=>3 THEN 3110 3090 FILE$=F3$ 3100 F=3 : GOTO 3200 3110 IF F=>4 THEN 3140 3120 FILE$=F4$ 3130 F=4 : GOTO 3200 3140 IF F=>5 THEN 3170 3150 FILE$=F5$ 3160 F=5 : GOTO 3200 3170 IF F6$="" OR IF F=6 THEN 21000 3180 FILE$=F6$ 3190 F=6 3200 PRINT 3210 IF P$="2" THEN 23000 3220 IF FILE$="" THEN 21000 3230 ' -- 3240 ' 4000 OPEN "I",#1,FILE$ 4010 PRINT FILE$ " is now printing." 4020 OPE=0 4030 ROUTE=1 4040 GOTO 22000 4050 B$=LEFT$(A$,1) 4060 IF B$<>"." THEN 9000 4070 PRINT "Message in the file: "A$ 4080 D=LEN(A$) 4090 IF D<5 THEN 4300 4100 M=4 4110 WH$=MID$(A$,M,1) 4120 IF WH$="" THEN 4190 4130 WH=ASC(WH$) 4140 WHILE WH=32 OR WH=46 4150 M=M+1 4160 GOTO 4110 4170 ' -- 4180 WEND 4190 CONTENT$=MID$(A$,M,D-M+1) 4200 FOR M=1 TO D 4210 CA$=MID$(A$,M,1) 4220 CA=ASC(CA$) 4230 IF CA=>97 AND CA=<122 THEN 4240 ELSE 4260 4240 CA=CA-32 4250 CA$=CHR$(CA) 4260 CAPSA$=CAPSA$+CA$ 4270 NEXT M 4280 A$=CAPSA$ 4290 CAPSA$="" 4300 IF D<3 THEN 4350 4310 C$=MID$(A$,2,2) 4320 IF C$="FI" THEN 6000 4330 IF C$="DM" THEN 4340 ELSE 4370 4340 PRINT 4350 IF ROUTE=1 THEN 22000 4360 IF ROUTE=2 THEN 8040 4370 IF C$="CP" THEN 4380 ELSE 5000 4380 CRY=VAL(CONTENT$) 4390 GOTO 11530 4400 ' -- 5000 IF C$="PA" OR C$="Pa" OR C$="pa" THEN 11530 5010 IF ROUTE=2 THEN 8040 5020 IF ROUTE=1 THEN 22000 5030 ' -- 5040 ' 6000 FILE2$=MID$(A$,5,D-4) 6010 W$=MID$(FILE2$,2,1) 6020 IF W$=":" THEN 8000 6030 FILE2$="B:"+FILE2$ 6040 ON ERROR GOTO 7000 6050 GOTO 8000 6060 ' -- 7000 IF ERR=53 THEN 7010 ELSE END 7010 PRINT "File " FILE2$ " not found. 7020 PRINT "Hit any key to continue or hit ^C to specify the file from the keyboard 7030 PRINT "If you do the latter, to begin again, type: " 7040 PRINT ,,,," FILE2$ 7050 PRINT ,,,," GOTO 8010 7060 Z$=INPUT$(1) : RESUME 8510 7070 ' -- 7080 ' 8000 OPEN "I",#2,FILE2$ 8010 IF EOF (2) THEN 8600 8020 GOTO 8050 8030 ' -- 8040 IF EOF (2) THEN 8500 8050 ROUTE=2 8060 GOTO 22000 8070 ' -- 8080 ' 8500 CLOSE #2 8510 ROUTE=1 8520 GOTO 22000 8530 ' -- 8540 ' 8600 PRINT "Warning! Your insert " FILE2$ " was not found. 8610 CLOSE #2 8620 ROUTE=1 8630 PRINT 8640 GOTO 22000 8650 ' -- 8660 ' 9000 IF STAR=0 THEN 10000 9010 IF PN=>STAR THEN 10000 9020 GOTO 11000 9030 ' -- 9040 ' 10000 LPRINT TAB(TB) A$ 10010 ' -- 10020 ' 11000 CT=CT+1 11010 IF FOOT1=0 AND FOOT2=0 THEN 11500 11020 IF CT=>NOO-3 THEN 11530 11030 GOTO 11510 11040 ' -- 11050 ' 11500 IF CT=>NOO THEN 11530 11510 IF ROUTE=1 THEN 22000 11520 IF ROUTE=2 THEN 22000 11530 IF STAR=0 THEN 11550 11540 IF PN>=STAR THEN 11550 ELSE 12500 11550 IF FOOT2<>1 THEN 12000 11560 FO=LEN(FOOT2$) 11570 I=(77-FO)/2+TB 11580 LPRINT 11590 LPRINT 11600 LPRINT TAB(I) FOOT2$ 11610 GOTO 12500 11620 ' -- 11630 ' 12000 IF FOOT1<>1 THEN 12500 12010 IF PN<2 THEN 12500 12020 FO=LEN(FOOT1$) 12030 I=(77-FO)/2+TB 12040 LPRINT TAB(I) FOOT1$ TAB(TB) "Page "PN 12050 ' -- 12060 ' 12500 LPRINT CHR$(12) 12510 IF FINIS<>1 THEN 13000 12520 FINIS=0 : CT=0 : GOTO 3000 12530 ' -- 13000 IF ROUTE=2 THEN 13500 13010 IF EOF(1) THEN 13020 ELSE 13500 13020 CLOSE : GOTO 19050 13030 ' -- 13040 ' 13500 PN=PN+1 13510 CT=0 13520 IF HEADING$="" THEN 13620 13530 IF STAR=0 THEN 13550 13540 IF PN=>STAR THEN 13550 ELSE 13610 13550 H=LEN(HEADING$) 13560 I=((77-H)/2)+TB 13570 LPRINT TAB(I) HEADING$ TAB(77) "Page "PN 13580 LPRINT 13590 LPRINT 13600 LPRINT 13610 CT=CT+4 13620 IF ROUTE=1 THEN 22000 13630 IF ROUTE=2 THEN 22000 13640 ' -- 13650 ' 14000 PRINT "Enter a heading to appear w/ page # after no. 1? (Y/N) 14010 PRINT 14020 P$=INPUT$(1) 14030 IF P$="Y" OR P$="y" THEN 14040 ELSE 14500 14040 LINE INPUT "The heading.....",HEADING$ 14050 PRINT 14060 GOTO 17010 14070 ' -- 14080 ' 14500 PRINT "1 = Enter a footing to appear with page number from page 2 onward. 14510 PRINT "2 = Use NAME 1 AND ADDRESS 1 and address as a footing on all pages, w/o a page no. 14520 PRINT "3 = Use NAME 2 and ADDRESS 2 as footing on all pages, w/o page no. 14530 PRINT "4 = NO FOOTING AT ALL 14540 PRINT 14550 P$=INPUT$(1) 14560 T=VAL(P$) 14570 IF T=1 THEN 15000 14580 IF T=2 THEN 15500 14590 IF T=3 THEN 16000 14600 IF T=4 THEN 17000 14610 PRINT "Try again. " 14620 PRINT 14630 GOTO 14500 14640 ' -- 15000 PRINT 15010 FOOT1=1 : FOOT2=0 15020 LINE INPUT "Footing to appear with page number: ",FOOT1$ 15030 GOTO 17000 15040 ' -- 15500 FOOT2=1 : FOOT1=0 15510 FOOT2$=NAME1$+SPAC$+ADD1LINE2$+SPAC$+ADD1LINE3$+SPAC$+ADD1LINE4$+SPAC$+ADD1LINE5$ 15520 GOTO 17000 15530 ' -- 16000 FOOT2=1 : FOOT1=0 16010 FOOT2$=NAME2$+SPAC$+ADD2LINE2$+SPAC$+ADD2LINE3$+SPAC$+ADD2LINE4$+SPAC$+ADD2LINE5$ 16020 ' -- 17000 PRINT 17010 PRINT "Change the number of lines per page (default 55)? (Y/N) 17020 PRINT 17030 P$=INPUT$(1) : PRINT 17040 IF P$="Y" OR P$="y" THEN 17050 ELSE 18000 17050 INPUT "The new number? ", NOO 17060 NOO=NOO-1 : PRINT 18000 PRINT "Begin at a later page number? (Y/N) 18010 PRINT 18020 Z$=INPUT$(1) : PRINT 18030 IF Z$="Y" OR Z$="y" THEN 18040 ELSE 18050 18040 INPUT "Page at which to begin the print ";STAR 18050 PRINT 18060 PRINT "You have checked all defaults now programmed. 18070 PRINT 18080 GOTO 2000 18090 ' -- 19000 CLOSE 19010 PRINT 19020 PRINT "You have finished printing " FILE$ 19030 IF FOOT1=0 AND FOOT2=0 THEN 19040 ELSE 20000 19040 LPRINT CHR$(12) 19050 CT=0 19060 PRINT 19070 GOTO 3000 19080 ' -- 20000 FINIS=1 : NEED=NOO-CT 20010 FOR MOV=1 TO NEED 20020 LPRINT 20030 NEXT MOV 20040 GOTO 11550 20050 ' -- 20060 ' 21000 PRINT 21010 PRINT "You have finished printing the files which you named on this disk. 21020 PRINT 21030 GOTO 10 21040 ' -- 21050 ' 22000 ' Input 22010 IF ROUTE=2 THEN 22050 22020 IF EOF (1) THEN 19000 22030 LINE INPUT #1,A$ 22040 GOTO 22070 22050 IF EOF (2) THEN 8500 22060 LINE INPUT #2,A$ 22070 GOTO 4050 22080 ' -- 22090 ' 23000 IF FILE$="" THEN 25000 23010 OPEN "I",#1,FILE$ 23020 PRINT 23030 PRINT "You are printing envelopes to the addressees in "FILE$ 23040 IF EOF(1) THEN 24500 23050 LINE INPUT #1,T$ 23060 A$="" 23070 T=LEN(T$) 23080 IF ENV=1 THEN 23500 23090 ENV$=MID$(T$,4,2) 23100 IF ENV$="X " OR ENV$= "x " THEN 23110 ELSE 23040 23110 ID$=RIGHT$(T$,T-5) 23120 ENV=1 23130 GOSUB 26000 23140 IF Z$<>"6" THEN 23160 23150 ENV=0 23160 GOTO 23040 23170 ' -- 23500 IF T$<>"" THEN 24000 23510 FOR REMOVES=1 TO 35 23520 PRINT 23530 NEXT REMOVES 23540 ENV=0 23550 GOTO 23040 23560 ' -- 24000 LPRINT TAB(35) T$ 24010 GOTO 23040 24020 ' -- 24500 CLOSE 24510 PRINT 24520 PRINT "You have finished printing the envelopes in " FILE$ 24530 PRINT 24540 GOTO 3000 24550 ' -- 25000 PRINT 25010 PRINT "You have finished envelopes to all files specified. 25020 PRINT 25030 GOTO 30 25040 ' -- 25050 ' 26000 PRINT 26010 PRINT "1 = NO RETURN ADDRESS 26020 PRINT "2 = NAME 1, ADDRESS1 26030 PRINT "3 = NAME 2, ADDRESS1 26040 PRINT "4 = NAME 1, ADDRESS2 26050 PRINT "5 = NAME 2, ADDRESS2 26060 PRINT "6 = SKIP this envelope altogether. 26070 PRINT 26080 PRINT "Choose only when your envelope is in place regarding " 26090 PRINT ID$ 26100 PRINT 26110 Z$=INPUT$(1) 26120 IF Z$="1" OR Z$="6" THEN RETURN 26130 IF Z$="2" OR Z$="4" THEN 26500 26140 IF Z$="3" OR Z$="5" THEN 27000 26150 PRINT "Try again." 26160 PRINT 26170 GOTO 26110 26180 ' -- 26500 LPRINT NAME1$ 26510 IF Z$="4" THEN 27500 26520 GOTO 27020 26530 ' -- 27000 LPRINT NAME2$ 27010 IF Z$="5" THEN 27500 27020 LPRINT ADD1LINE2$ 27030 GOTO 27510 27040 ' -- 27500 LPRINT ADD2LINE2$ 27510 LPRINT ADD1LINE3$ 27520 LPRINT ADD1LINE4$ 27530 LPRINT ADD1LINE5$ 27540 LPRINT 27550 LPRINT 27560 RETURN D2LINE2$ 27510 LPRINT ADD1LINE3$ 27520 LPRINT ADD1LINE4$ 27530 LPRINT 25020 PRINT 25030 GOTO 30 25040 ' -- 25050 ' 26000 PRINT 26010 PRINT "1 = NO RETURN ADDRESS 26020 PRINT "2 = NAME 1, ADDRE Documentation for JUKI.BAS A Program to Print WordStar Texts Using True Proportional Spacing By Louie Crew Director of the Writing Program Chinese University Shatin, N.T. Hong Kong (c) 1985 by Louie Crew Note: JUKI.BAS is free only for individuals to use. The owner will prosecute any one who tries to sell it. Requirements and settings: JUKI.BAS is set to run on an Osborne 1B (double density) at screen width 80, and with a JUKI 6100 printer set for Proportional Spacing. JUKI.BAS should reside with MBASIC files on the disk in Drive A: JUKI.BAS reads and prints files in Drive B: .pa Purpose: Many persons who bought the JUKI cannot enjoy its true proportional spacing because they use WordStar to format text. The print therefore looks only like the work of a very fine typewriter. JUKI.BAS will turn the printer into the printing press it was designed to be. Overview: JUKI.BAS reads texts prepared in WordStar and prints them using JUKI's true proportional spacing. Procedure: 1) Turn off your JUKI. Set the switch on the front panel to PS for proportional spacing. Turn on your JUKI. 1) Strip your text of WordStar's high bits. To do so, run PIP:MYTEXT=MYTEXT[z The '[z' here does the stripping. 2) In Drive A:, put your MBASIC files plus JUKI.BAS. In Drive B: In Drive B:, put your stripped MYTEXT. Then enter: MBASIC JUKI 3) At the program's first prompt, hit any key. The program then lists your files on B: and prompts you to enter one that you wish to print, e.g., MYTEXT You may enter up to five more stripped files for any one printing. The prompts stop after you have entered just a carriage return. 4) Next the program prompts: 1 = BEGIN PRINTING 2 = Address envelopes 3 = Shift to Printer No. 2 (Epson) 4 = Alter other defaults If you choose Option 1 here, the program moves directly to print you text. Other Options Envelopes: The program allows you to address envelopes without typing the addresses separately. The program reads addresses within a text and prints those properly on envelopes: To identify an address as such, on the line immediately before the first line of the address enter: ...X ANY MESSAGE (Those who use DOCUMATE will welcome this code, as it matches the code DOCUMATE uses to build an index. JUKI.BAS will print all lines after the ...X line until it reaches a blank line. But first it will prompt for more choices: 1 = NO RETURN ADDRESS 2 = NAME 1, ADDRESS1 3 = NAME 2, ADDRESS1 4 = NAME 1, ADDRESS2 5 = NAME 2, ADDRESS2 6 = SKIP this envelope altogether. Choices 2-5 here prompt the program to print your own return addresses if you first enter them. To do so, you will need to put the information in the quotes in the program lines 300-400 and save the modified version as your very own JUKI.BAS. If you prefer to use printed envelopes, obviously you will enter only Choice 1 or Choice 6 here. When you have finished printing envelopes, the program returns you to  the main menu of alternatives: 1 = BEGIN PRINTING 2 = Address envelopes 3 = Shift to Printer No. 2 (Epson) 4 = Alter other defaults Shift to an EPSON. By Choice 3, you change the defaults to those for an EPSON MX80. (See program lines 100-240) Explanation: Proportional Spacing on the Juki 6100 works allows a longer line than the EPSON set at the standard 10 pitch. A Note on Preparing for use with text JUKI.BAS and with EPSON The program works best if you set the left margin at Column 1 and the right margin at Column 80. The program automatically sets such a text to Column 8, and that fairly much centers your text for JUKI. If you reset for the Epson (Choice 3 above), the program will allow fo the expansion to left and right that you require for the 10- pitch. You will consequently have no margins, except the one-quarter inch on either side, since 80 columns in 10 pitch take up only 8 of your 8 and one-half inches of width. If you use the Epson, be sure that you have not entered text to the right of Column 80, or it will print over other text. Alter Other Defaults: 1. JUKI.BAS allows you to enter a heading to appear with a page number after page 1. (Default: No such heading, unless you entered it in the text itself. 2. JUKI.BAS lets you choose several footing options: Enter a footing to appear with page number from page 2 onward. Use NAME 1 AND ADDRESS 1 and address as a footing on all pages, w/o a page no. Use NAME 2 and ADDRESS 1 as footing on all pages, w/o page no. NO FOOTING AT ALL 3. JUKI.BAS lets you change the number of lines per page (default 55). 4. JUKI.BAS lets you choose a later page number at which to begin.  Note well: when you print multiple files with one run, JUKI.BAS resets the page number to "1" for each. ASSUMPTIONS AND LIMITATIONS JUKI.BAS will not recognize any of WordStar's printing features signalled with the ^P, such as ^PB for boldface. JUKI.BAS reads one whole line of text at a time and cannot translate such features. The program assumes that you have not used such characters. Some of them will stop the program, but you can resume printing by hitting reset on the front panel of the machine. JUKI.BAS will read and respond to the following of WordStar's dot commands for printing. It will also show all dot commands on the screen as it comes to them. .FI ...At least to one level. That is, JUKI.BAS will let you merge one text into another, but only one at a time. No more than two files (the main text and the text being merged) can be opened at any one time.) Warning: any Merged text must also have been stripped. .DM Messages following such commands appear on the screen (as does the content other lines beginning with dot commands. .PA Allows you to force a new page, as in WordStar's own printing. .CP Allows you to call for a new page conditionally, as in WordStar's own printing. When JUKI.BAS has printed all files which you specify, it allows you to specify still others or to press *<> to return to the system. Enjoy. t commands for printing. It will also show all dot commands on the screen as it comes to them. .FI ...At least to one level. That is, JUKI.BAS will let you merge one text into another, but only one at a time. No more than two files (the main text and the text being merged) can be opened at any one time.) Warning: any Merged text;s1 :<2/2 :ʺ\<}9\‡!~ʇ {29  ˿0̘#|(     @2l.y(% O}2xGk(s#ruz( 0:O}}O{8*s#r:G:2|!t }!~ ad0% 0%0wɁx +~# (0w#!z  >O!o0$~2lkuy!o$"~#fo N3z! x( O :   { PAIRX v1.0 (c) Eric Gans 04/06/85 Checks for unmatched ^B^D^S^T^V^X Max lines ^/-^/: 0 (Byte at 102H) To use, enter: pairx [d:]filename $Can't open file. $Unmatched ^ page 000 line 00 $Reading page 000 $No unmatched characters. Pages read: 000 $Gas 04/06/85 CheSBDTVX;;xxxxxxxx PAIRX.DOC v1.0 Recentl someon wrot progra calle PAIR.CO t solv th proble o unpaire contro character i WordStar Everyon wh ha use W (an man othe word-processors ha encountere th difficult o checkin fo unmatche underline boldfac an othe toggles Eve Newwor doesn' entirel solv thi problem since there is no way of showing subscripts, etc. on the screen. Sinc堠 m wif doe goo dea o栠 word-processing particularl scenario wit lot o underlining gav he th PAIҠ program bu sh foun i mor frustratin tha useful: whe i find a unmatche pai i fil i doesn' tel yo where an i yo mak tw error the cance each other out PAIRؠ i a extende versio o PAIR.CO tha solve bot thes problems I output pag an lin numbe fo unmatche contro character (^B ^D ^S ^T ^V ^X i W documen mod files (Fo non-do files i won' coun page bu wil g o countin lin number fro t 25 (=0) Thi coul b changed bu m wif doesn' us non-do files... Wha i o i no unmatche doe no depen o th tota numbe o ^ o ^ i th file bu o th maximu separatio yo allow Th progra come configure fo lin maximu (i.e. on 2. -s102 3. 1 nn <-- desired number in hexadecimal 4. xx . 5. -^C 6. save 3 pairx.com  The format is straightforward: just enter pairx [d:]filenm Sinc pag an lin number ar given yo ca determin fo yoursel whethe th characte foun b th progra i reall unmatche o jus farthe tha usua fro it mate T kee yo ocupied, PAIRX outputs a running total of pages read. I hope you enjoy this program as much as my wife does! Eric Gans French Dep't UCLA Los Angeles, CA 90024 t FF (=255). Settin i t 0 fo example woul giv yo a erro messag ever tim th beginnin an en o toggl wer no o th sam line singl unmatche characte wil produc a erro messag whateve you setting. * Thi ca b don mos easil usin dis utilit lik m SRW. I DDT follo th followin steps: 1. ddt pairx.com 2. -s102 3. 1 nn <-- desired number in hexadecimal 4. xx . 5. -^C 6. save 3 pairx.com rem************************************************************************ rem P R O P O R T I O N A L S P A C I N G F O N T REM F O R M A T T I N G P R O G R A M REM For text formatting and right justification of text using the TI855 REM Proportional Spacing (Modern) Print Font rem Copyright (c) 1984 St. Benedict's Farm, Waelder, TX 78959 rem begun 11/6/84 rem************************************************************************** DIM cdots%(126) REM FOR TRANSLATION TABLE INTO DOTS DIM gap%(70),tdots%(70) REM FOR DOT SPACING BETWEEN WORDS on error goto 9999 false%=0:true%=not false% REM INCLUDE PSNCLUDE HERE - NOLIST %NOLIST %INCLUDE PSNCLUDE REM GETSTR,GETNUM,YESNO,PAUSE,PANIC %LIST print "TI-855 MODERN-PS FONT FORMATTING AND JUSTIFYING PROGRAM" print "Copyright (c) November 1984 St. Benedict's Farm, Waelder, TX 78959" print 5 input "Enter FILE to print :";line a$:printfile$=a$ if size(a$)=0 then print a$+" NOT ON DISK":goto 5 justify%=true%:page.offset%=20:right.mar%=85:page.len%=66:page%=1 page.numbering%=true%:page.pause%=false%:copies%=1:spacing%=1:font%=3 margin.top%=5:margin.bottom%=6:heading.mar%=2:footing.mar%=3 pitch.factor=1.0:header$="":footing$="" print "****DEFAULT SETTINGS****" 15 if page.pause% then page.pause$="Y" ELSE page.pause$="N" if page.numbering% then page.numbering$="Y" ELSE page.numbering$="N" print "**** CURRENT VALUES ****" print "1. PS Font SLOT # ";font% print "2. Page Offset ";str$(page.offset%) print "3. Right Margin ";str$(right.mar%) print "4. Starting Page # ";str$(page%) print "5. Page Numbering ";page.numbering$ print "6. Page Pause ON ";page.pause$ print "7. Number of Copies";str$(copies%) print "8. Line Spacing ";str$(spacing%) print "9. Page Length ";str$(page.len%) print "10.Margin Top ";str$(margin.top%) print "11.Margin Bottom ";str$(margin.bottom%) print "12.Heading Margin ";str$(heading.mar%) print "13.Footing Margin ";str$(footing.mar%) print "14.Header String ";header$ print "15.Footing String ";footing$ setting%=getnum("Enter NUMBER to change (0=ALL OK):",0,15) if setting%=0 then goto 30 on setting% gosub FT,PO,RM,SP,PN,PP,NUM,LNSP,PL,MT,MB,HM,FM,HS,FS:goto 15 FT: font%=getnum("Enter SLOT NUMBER where PS Font is inserted:",1,3): \ return PO: page.offset%=getnum("Enter Page Offset:",1,right.mar%-1) RM: right.mar%=getnum("Enter Right Margin:",10,132):return SP: page%=getnum("Enter Starting Page:",1,32765):return PN: if yesno("Number pages")="Y" then page.numbering%=true% \ ELSE page.numbering%=false% return PP: if yesno("Pause Between Pages")="Y" then page.pause%=true% \ ELSE page.pause%=false% return NUM: copies%=getnum("Enter Number of Copies to be printed:",1,32765):return LNSP: spacing%=getnum("Enter Line Spacing:",1,20):return PL: page.len%=getnum("Enter Page Length:",6,255):return MT: margin.top%=getnum("Enter Margin Top:",0,page.len%/2):return MB: margin.bottom%=getnum("Enter Margin Bottom:",0,page.len%/2):return HM: heading.mar%=getnum("Enter Heading Margin:",0,margin.top%):return FM: footing.mar%=getnum("Enter Footing Margin:",0,margin.bottom%):return HS: header$=getstr("Enter Header String:",0,right.mar%):return FS: footing$=getstr("Enter Footing String:",0,right.mar%):return 30 REM---------- SET PRINTER VALUES HERE BEFORE BEGINNING ------------ print "DOCUMENT IS READY FOR PRINTING" print "PRINTER MUST BE ON-LINE -":call pause print:print "Press ANY KEY to halt printing..." LPRINTER while copies.printed%99: \ out$=chr$(27)+chr$(106)+chr$(100)+chr$(0)+ \ left$(graphics$,100)+out$: \ i%=i%-100: \ graphics$=right$(graphics$,len(graphics$)-100): \ wend: \ out$=chr$(27)+chr$(106)+chr$(i%)+chr$(0)+graphics$+out$: \ center.next.line%=false% print out$ REM---------- RESET VALUES FOR NEXT LINE ----------------------------- justify%=true% for x%=1 to space.place% gap%(x%)=false% tdots%(x%)=false% next x% ldots%=false%:space.place%=false%:space.found%=false% graph$="":graphics$="":last.graph$="":just$="" REM------------------------------------------------------------------- lin%=lin%+1 gosub END.OF.PAGE if lin%=0 then goto PRINTLINE.EXIT if spacing%>1 then \ for dbl.spacing%=1 to spacing%-1: \ print: \ lin%=lin%+1: \ gosub END.OF.PAGE: \ if lin%=0 then goto PRINTLINE.EXIT: \ next dbl.spacing% PRINTLINE.EXIT: return STARTPAGE: for x%=1 to margin.top%-(heading.mar%+1) print next x% i%=match("\#",header$,1) if i% and page.numbering% then \ header$=left$(header$,i%-1)+str$(page%)+ \ right$(header$,len(header$)-i%) print header$ for x%=1 to heading.mar% print next x% lin%=0 STARTPAGE.EXIT: return END.OF.PAGE: if lin%127 then i%=i%-128 REM STRIPS HI-BIT FOR TESTING if i%=2 then \^B IN TEXT TOGGLES TAB if tabbing% then \TAB IS BEING TOGGLED OFF - PRINT IT! just$=just$+chr$(27)+chr$(9)+chr$(tab%): \SET @WRAPTIME tabbing%=false%:tab%=false% \TAB% RESETS HERE!!!! ELSE tabbing%=x% REM NOTES THAT TABBING HAS BEGUN if tabbing% then goto GET.NEXT.CHAR REM DON'T PRINT TAB VALUES if i%=20 then \^T IN TEXT - TOGGLES SUPERSCRIPT if superscript% then \ just$=just$+chr$(27)+chr$(85): \ESC U - OFF superscript%=false% \ ELSE \ just$=just$+chr$(27)+chr$(68): \ESC D - ON superscript%=true% if i%=21 then \^U IN TEXT=ROLL UP ONE LINE if lin% then \WILL NOT ROLL UP ABOVE HEADER!!! just$=just$+chr$(27)+chr$(10): \ESC LF - UP 1 LINE lin%=lin%-1 if i%=22 then \^V IN TEXT=SUBSCRIPT TOGGLE if subscript% then \ just$=just$+chr$(27)+chr$(68): \ESC D - OFF subscript%=false% \ ELSE \ just$=just$+chr$(27)+chr$(85): \ESC U - ON subscript%=true% if i%=3 then \^C IN TEXT FOR PAUSE CONSOLE:print just$:call panic:LPRINTER if i%=24 then \^X IN TEXT=eXpanded print if expanded.print% then \ just$=just$+chr$(20): \CANCELS EXPANDED PRINT expanded.print%=false% \ALSO CANCELLED BY CR!! ELSE \ just$=just$+chr$(14): \EXPANDED PRINT expanded.print%=true% if i%=25 then \^Y IN TEXT=SHADOW PRINTING (81=ON; 82=0FF) if shadow.printing% then \ just$=just$+chr$(27)+chr$(82): \ shadow.printing%=false% \ ELSE \ just$=just$+chr$(27)+chr$(81): \ shadow.printing%=true% if i%=32 then space.found%=space.found%+1: \ if space.found%>extra.dots% then \ inserted.len%=dotseach%: \ graphics$=last.graph$ \ ELSE \ inserted.len%=dotseach%+1: \ graphics$=graph$ if i%=32 then \ if justify% then \LINE NEEDS JUSTIFICATION just$=just$+" "+ \ chr$(27)+chr$(106)+chr$(inserted.len%)+ \ chr$(0)+graphics$ \ ELSE just$=just$+" " if i%=45 then \ if soft.hyphen% then soft.hyphen%=false%:i%=false%: \ if x%=len(out$) then\LAST CHARACTER IN LINE just$=just$+chr$(45): \CHANGE TO HARD HYPHEN goto JUSTEXIT if i%>32 then \ just$=just$+chr$(i%) GET.NEXT.CHAR: next x% JUSTEXIT: out$=just$ return REM--------------------------------------------------------------------------- DEF getnum(prompt,low,high) PUBLIC REM THIS FUNCTION RETURNS AN INTEGER WITHIN A GIVEN RANGE INTEGER getnum,low,high,number STRING prompt 10 print prompt;:input "";number if numberhigh then print "Out of Range - reenter": \ goto 10 getnum=number FEND REM--------------------------------------------------------------------------- DEF getstr(prompt,min,max) PUBLIC REM THIS FUNCTION RETURNS A STRING AS PROMPTED. REM IT PROMPTS THE OPERATOR TO INPUT A STRING VALUE AND PROVIDES REM DASHES TO INDICATE THE MAXIMUM LENGTH OF STRING PERMITTED INTEGER min,max,i STRING prompt,getstr,t 10 t="":for i=1 to max:t=t+"-":next i:print prompt+t t="":for i=1 to len(prompt)-1:t=t+" ":next i:print t; input "";line t if len(t)>max then print "Too long - reenter":goto 10 if len(t)"Y" and t<>"N" then print "Use only Y or N":goto 10 yesno=t FEND REM--------------------------------------------------------------------------- DEF pause PUBLIC REM THIS FUNCTION CAUSES THE PROGRAM TO PAUSE UNTIL THE OPERATOR PRESSES A KEY STRING t input "Press CR when ready -";line t FEND REM--------------------------------------------------------------------------- DEF panic PUBLIC REM THIS FUNCTION INTERRUPTS THE OPERATION IN PROGRESS UNTIL OPERATOR ENTERS REM EITHER A CR OR "STOP" REM NOTE!!! IF OUTPUT IS DIRECTED TO THE PRINTER, IT IS NECESSARY TO DIRECT REM OUTPUT BACK TO THE CONSOLE MOMENTARILY FOR THE CONSTAT% TO WORK PROPERLY. REM BE SURE TO RESET OUTPUT TO LPRINTER AFTER CALLING PANIC! STRING t 10 print bel;"Enter STOP to abort program, or" input "Press CR to continue -";line t if ucase$(t)="STOP" then stop if t="" then return ELSE goto 10 FEND  10 print prompt;:input "?(Y/N)";t:t=ucase$(left$(t,1)) if t<>"Y" and t<>"N" then print "Use only Y or N":goto 10 yesno=t FEND REM--------------------------------------------------------------------------- DEF pause PUBLIC REM THIS FUNCTION CAUSES THE PROGRAM TO PAUSE UNTIL THE OPERATOR PRESSES A KEY STRING t input "Press CR when ready -";line t FEND REM--------------------------------------------------------------------------- DEF panic PUBLIC REM THIS FUNCTION INTERRUPTS THE OPERATION IN PROGRESS UNTIL OPERATOR ENTERS REM EITHER A CR OR "STOP" REM NOTE!!! IF OUTPUT IS DIRECTED TO THE PRINTER, IT IS NECESSARY TO DIRECT REM OUTPUT BACK TO THE CONSOLE MOMENTARILY FOR THE CONSTAT% TO WORK PROPERLY. REM BE SURE TO RESET OUTPUT TO LPRINTER AFTER CALLING PANIC! STRING t 10 print bel;"Enter STOP to abort program, or" input "Press CR to continue -";li0,0," - control-shift zero - NUL CHARACTER" 1,0,"^A - 12 pitch ESCz(122)" 2,0,"^B - TAB TOGGLE:(ESC)(HT-9)n (n=CHR$(number)" 3,0,"^C - in Wordstar text=PAUSE PRINTER" 4,0,"^D" 5,0,"^E" 6,0,"^F" 7,0,"^G- BEL" 8,0,"^H - BACKSPACE KEY" 9,0,"^I - TAB KEY" 10,0,"^J - LINE FEED" 11,0,"^K - VERTICAL TAB" 12,0,"^L - FORM FEED" 13,0,"^M - CARRIAGE RETURN" 14,0,"^N - Normal 10 pitch ESCy(121)" 15,0,"^O - compressed print-15=ON; 18=OFF" 16,0,"^P" 17,0,"^Q" 18,0,"^R - cancels compressed print" 19,0,"^S" 20,0,"^T - SUPERSCRIPT TOGGLE:(ESC)D-68=ON;(ESC)U-85=OFF" 21,0,"^U -roll up 1 line-ESC LF" 22,0,"^V - SUBSCRIPT TOGGLE:(ESC)U-85=ON;(ESC)D-68=OFF" 23,0,"^W" 24,0,"^X -expanded print-14=ON; CR (!) OR 20=OFF" 25,0,"^Y - toggle shadow printing (81=ON;82=OFF)" 26,0,"^Z" 27,0,"ESC" 28,0,"FS - CONTROL-SHIFT-L" 29,0,"GS - CONTROL-SHIFT-M" 30,0,"RS - CONTROL-SHIFT-N" 31,0,"US - CONTROL-SHIFT-O" 32,10," " 33,10,"!" 34,10,""" 35,10,"#" 36,10,"$" 37,10,"%" 38,12,"&" 39,6,"'" 40,10,"(" 41,10,")" 42,10,"*" 43,10,"+" 44,10,"," 45,10,"- minus sign/ hyphen" 46,10,"." 47,10,"/" 48,10,"0" 49,10,"1" 50,10,"2" 51,10,"3" 52,10,"4" 53,10,"5" 54,10,"6" 55,10,"7" 56,10,"8" 57,10,"9" 58,10,":" 59,10,";" 60,12,"<" 61,10,"=" 62,12,">" 63,10,"?" 64,10,"@" 65,14,"A" 66,14,"B" 67,14,"C" 68,14,"D" 69,12,"E" 70,12,"F" 71,14,"G" 72,14,"H" 73,8,"I" 74,10,"J" 75,14,"K" 76,12,"L" 77,14,"M" 78,14,"N" 79,14,"O" 80,12,"P" 81,14,"Q" 82,14,"R" 83,12,"S" 84,14,"T" 85,14,"U" 86,14,"V" 87,14,"W" 88,14,"X" 89,14,"Y" 90,12,"Z" 91,10,"[" 92,12,"\ - produces registered symbol on printer" 93,10,"]" 94,16,"^ - produces copyright symbol on printer" 95,12,"_ underline character" 96,10,"` - produces 'degree' symbol on printer" 97,10,"a" 98,12,"b" 99,10,"c" 100,12,"d" 101,10,"e" 102,8,"f" 103,12,"g" 104,12,"h" 105,6,"i" 106,6,"j" 107,12,"k" 108,6,"l" 109,14,"m" 110,12,"n" 111,10,"o" 112,12,"p" 113,12,"q" 114,10,"r" 115,10,"s" 116,8,"t" 117,12,"u" 118,12,"v" 119,14,"w" 120,12,"x" 121,12,"y" 122,10,"z" 123,10,"{ - produces double vertical Ss on printer" 124,10,"| - produces paragraph symbol on printer" 125,8,"} - produces small crucifix symbol on printer" 126,12," ~ - the tilde produces a small TM symbol on printer"  75,14,"K" 76,12,"L" 77,14,"M" 78,14,"N" 79,14,"O" 80,12,"P" 81,14,"Q" 82,14,"R" 83,12,"S" 84,14,"T" 85,14,"U" 86,14,"V" 87,14,"W" 88,14,"X" 89,14,"Y" 90,12,"Z" 91,10,"[" 92,12,"\ - produces registered symbol on printer" 93,10,"]" 94,16,"^ - produces copyright symbol on printer" 95,12,"_ underline character" 96,10,"` - produces 'degree' symbol on printer" 97,10,"a" 98,12,"b" 99,10,"c" 100,12,"d" 101,10,"e" 102,8,"f" 103,12,"g" 104,12,"h" 105,6,"i" 106,6,"j" 107,12,"k" 108,6,"l" 109,14,"m" 110,12,"n" 111,10,"o" 112,12,"p" 113,12,"q" 114,10,"r" 115,10,"s" 116,8,"t" 117,12,"u" 118,12,"v" 119,0,0," - control-shift zero - NUL CHARACTER" 1,0,"^A - 12 pitch ESCz(122)" 2,0,"^B - TAB TOGGLE:(ESC)(HT-9)n (n=CHR$(number)" 3,0,"^C - in Wordstar text=PAUSE PRINTER" 4,0,"^D" 5,0,"^E" 6,0,"^F" 7,0,"^G- BEL" 8,0,"^H - BACKSPACE KEY" 9,0,"^I - TAB KEY" 10,0,"^J - LINE FEED" 11,0,"^K - VERTICAL TAB" 12,0,"^L - FORM FEED" 13,0,"^M - CARRIAGE RETURN" 14,0,"^N - Normal 10 pitch ESCy(121)" 15,0,"^O - compressed print-15=ON; 18=OFF" 16,0,"^P" 17,0,"^Q" 18,0,"^R - cancels compressed print" 19,0,"^S" 20,0,"^T - SUPERSCRIPT TOGGLE:(ESC)D-68=ON;(ESC)U-85=OFF" 21,0,"^U -roll up 1 line-ESC LF" 22,0,"^V - SUBSCRIPT TOGGLE:(ESC)U-85=ON;(ESC)D-68=OFF" 23,0,"^W" 24,0,"^X -expanded print-14=ON; CR (!) OR 20=OFF" 25,0,"^Y - toggle shadow printing (81=ON;82=OFF)" 26,0,"^Z" 27,0,"ESC" 28,0,"FS - CONTROL-SHIFT-L" 29,0,"GS - CONTROL-SHIFT-M" 30,0,"RS - CONTROL-SHIFT-N" 31,0,"US - CONTROL-SHIFT-O" 32,73," " 33,61,"!" 34,61,""" 35,61,"#" 36,61,"$" 37,61,"%" 38,73,"&" 39,36,"'" 40,61,"(" 41,61,")" 42,61,"*" 43,61,"+" 44,61,"," 45,61,"- minus sign/ hyphen" 46,61,"." 47,61,"/" 48,61,"0" 49,61,"1" 50,61,"2" 51,61,"3" 52,61,"4" 53,61,"5" 54,61,"6" 55,61,"7" 56,61,"8" 57,61,"9" 58,61,":" 59,61,";" 60,73,"<" 61,61,"=" 62,73,">" 63,61,"?" 64,61,"@" 65,85,"A" 66,85,"B" 67,85,"C" 68,85,"D" 69,73,"E" 70,73,"F" 71,85,"G" 72,85,"H" 73,49,"I" 74,61,"J" 75,85,"K" 76,73,"L" 77,85,"M" 78,85,"N" 79,85,"O" 80,73,"P" 81,85,"Q" 82,85,"R" 83,73,"S" 84,85,"T" 85,85,"U" 86,85,"V" 87,85,"W" 88,85,"X" 89,85,"Y" 90,73,"Z" 91,61,"[" 92,73,"\ - produces registered symbol on printer" 93,61,"]" 94,97,"^ - produces copyright symbol on printer" 95,73,"_ underline character" 96,61,"` - produces 'degree' symbol on printer" 97,61,"a" 98,73,"b" 99,61,"c" 100,73,"d" 101,61,"e" 102,49,"f" 103,73,"g" 104,73,"h" 105,36,"i" 106,36,"j" 107,73,"k" 108,36,"l" 109,85,"m" 110,73,"n" 111,61,"o" 112,73,"p" 113,73,"q" 114,61,"r" 115,61,"s" 116,49,"t" 117,73,"u" 118,73,"v" 119,85,"w" 120,73,"x" 121,73,"y" 122,61,"z" 123,61,"{ - produces double vertical Ss on printer" 124,61,"| - produces paragraph symbol on printer" 125,49,"} - produces small crucifix symbol on printer" 126,73," ~ - the tilde produces a small TM symbol on printer" " 75,85,"K" 76,73,"L" 77,85,"M" 78,85,"N" 79,85,"O" 80,73,"P" 81,85,"Q" 82,85,"R" 83,73,"S" 84,85,"T" 85,85,"U" 86,85,"V" 87,85,"W" 88,85,"X" 89,85,"Y" 90,73,"Z" 91,61,"[" 92,73,"\ - produces registered symbol on printer" 93,61,"]" 94,97,"^ - produces copyright symbol on printer" 95,73,"_ underline character" 96,61,"` - produces 'degree' symbol on printer" 97,61,"a" 98,73,"b" 99,61,"c" 100,73,"d" 101,61,"e" 102,49,"f" 103,73,"g" 104,73,"h" 105,36,"i" 106,36,"j" 107,73,"k" 108,36,"l" 109,85,"m" 110,73,"n" 111,61,"o" 112,73,"p" 113,73,"q" 114,61,"r" 115,61,"s" 116,49,"t" 117,73,"u" 118,73,"vWORDWRAP: chr%=1 if out$="" then \BEGINNING OF PARAGRAPH-SPACES INCLUDED BUT IGNORED while mid$(para$,chr%,1)=" ": \THEY DO NOT SEPARATE WORDS! ldots%=ldots%+cdots%(32): \LDOTS%=LINE DOTS,A SPACE=10 chr%=chr%+1: \ wend \ ELSE \STRIP LEADING SPACES AT BEGINNING OF EACH LINE while asc(left$(para$,1))=32 or asc(left$(para$,1))=160: \ para$=right$(para$,len(para$)-1): \ wend for x%=chr% to len(para$) REM LOOPS TO END-OF-LINE (OUT$) i%=asc(mid$(para$,x%,1)) REM WHAT IS CHAR IN DECIMAL? if i%=173 then \THIS IS A SOFT.HYPHEN CHARACTER if ldots%<=dpl%+cdots%(32) then \IT MAY FIT INTO THIS LINE hyph.dots%=ldots%+cdots%(32): \=HIGHEST HYPH DOTS IF PRINTED soft.hyphen%=x%:hyphen%=x% if i%>127 then i%=i%-128 REM STRIPS HI-BIT if i%=2 then \^B IN TEXT - TAB TOGGLE if tabsetting% then \ tabsetting%=false% \ ELSE tabsetting%=x% if tabsetting% and x%>tabsetting% then \NXT CHR AFTER^B=1ST ADDED UP tab%=(tab%*10)+val(chr$(i%)):goto GETNEXT.CHAR REM VAL OF TAB% ACCUMULATES AS DECIMAL NUMBER UNTIL TAB% TOGGLES OFF! if tab% then \ if x%>tab%+3 or tab%>160 then \ CONSOLE:print "ERROR: TAB TOO LARGE; TAB=";tab%: \ print "OR NO PAIRED ^I TO CLOSE TAB VALUE":CALL PAUSE if i%=24 then \^X IN TEXT - EXPANDED PRINT if xpand% then \ xpand%=false% \ ELSE xpand%=x% if i%=25 then \TOGGLES SHADOW PRINTING OFF/ON @WORDWRAP TIME! if shadow% then \ shadow%=false%: \ ELSE shadow%=x% ldots%=ldots%+cdots%(i%) REM FROM PS DOT ARRAY TABLE if xpand% then \EACH CHARACTER IS DOUBLE THE DOTS IN WIDTH ldots%=ldots%+cdots%(i%) if shadow% then \ if i%>32 then ldots%=ldots%+1: \FOR 12 & 10 PITCH if pitch.factor=.72 then \CDOTS ARE MAGNIFICATION OF 10 ldots%=ldots%+9 REM SO ADD 9 MORE-TOTAL=10 if ldots%>dpl% then \ if i%<>32 then \ ldots%=ldots%-cdots%(i%):goto EOL.FOUND if i%=45 and soft.hyphen%<>x% then \THIS IS A HARD.HYPHEN if ldots%<=dpl% then \HYPHEN MAY BE USED AS A BREAK POINT hyph.dots%=ldots%: \HIGHEST HYPHEN POINT SO FAR... hyphen%=x% if i%=32 then \BREAK-SPACE BETWEEN WORDS ENCOUNTERED if ldots%<=dpl%+cdots%(32) then \A POSSIBLE BREAK-SPACE space.place%=space.place%+1: \KEEPS COUNT OF SEPARATING SPACES gap%(space.place%)=x%: \AND THE CHARACTER LOCATION tdots%(space.place%)=ldots% REM + TOTAL DOTS TO THAT POINT if ldots%>=dpl% then\THIS LAST CHAR POSSIBLE ON THIS LINE goto EOL.FOUND if soft.hyphen%=x% then \S.HYPH MAY NOT BE PRINTED ldots%=ldots%-cdots%(32): \RESETS AS IF NO S.HYPH DOTS soft.hyphen%=false% GETNEXT.CHAR: next x% NOWRAP: if ldots%gap%(space.place%) then \BREAK ON HYPHEN out$=left$(para$,hyphen%): \ ldots%=hyph.dots%: \  para$=right$(para$,len(para$)-hyphen%): \ goto WW.EXIT \ ELSE \BREAK ON LAST AVAILABLE SPACE CHARACTER out$=left$(para$,gap%(space.place%)-1): \ ldots%=tdots%(space.place%)-cdots%(32): \ para$=right$(para$,len(para$)-gap%(space.place%)): \ gosub RESET.SHADOW: \ gosub DECREMENT.SPACE.PLACES : \ while asc(right$(out$,1))=32 or \ asc(right$(out$,1))=160: \STRIP TRAILING SPACES out$=left$(out$,len(out$)-1): \ ldots%=ldots%-cdots%(32): \ gosub DECREMENT.SPACE.PLACES: \ wend WW.EXIT: soft.hyphen%=false%:hyph.dots%=false%:hyphen%=false% return DECREMENT.SPACE.PLACES: gap%(space.place%)=false% tdots%(space.place%)=false% space.place%=space.place%-1 return RESET.SHADOW: REM TOGGLES ON @ POSITIVE % if shadow%>gap%(space.place%) then \WILL REPEAT THE MEET @NEXT LINE shadow%=false% REM NOW SET OFF! if xpand%>gap%(space.place%) then \SAME-O SAME-O xpand%=false% REM EXPANDED PRINT CANCELLED @CR ANYWAY! BEWARE return .pl70 .op .rm 74  .CN TI 855 PRINTER .CN Modern Proportional Spacing Font .cn With .cn RIGHT JUSTIFICATION!!! .rm85  That' correct Righ justifie column o beautifull space proportiona printin fro you T 85 Printe wit th Moder P Fon (2230972-0001) Yo ar lookin a i righ now I include an pitc selection shado printing an i come i typ o compute progra calle Prin Formatter Tha i becaus wha yo se o th scree i NOT wha yo ge o th paper Th word ma "wrap (o break a differen point i th lin tha show o screen an becaus eac lette occupie slightl differen amoun o space i take compute t sprea i al ou s i exactly matche th neede margins prin formatte provide muc mor tha simpl righ justificatio o text eve thoug i thi particula cas tha ma b th principa reaso fo it use. Fo instance i additio t Lef an Righ Margins Optiona Pag Numberin an Pag Pausing ther ar consideration o suc thing a wha numbe begin Pag Numbering th Numbe o Copie desired Lin Spacing Pag Length To an Botto Margin wit Optiona Header a th To and/o Botto an thei associate Margins The i additio t al this ther shoul b som wa t toggl o an of suc thing a Shado Printing, Expande Print an wa t Rol Bac U Lin a tim (fo possibl printin i columns) The ther ar th option o har an sof hyphen t consider whic Wordsta user ar s familia with Al thes things plu th Centerin Nex Lin feature are included in our program: .cn PSFORMAT PSFORMA i availabl fro St Benedict' Far fo $1 postpai i th US I ha als bee place i th publi domai a "use supported software Mos popula dis format ar supported bu yo mus tel u wha yo need REQUIRED (1 TI-85 printer o course wit P font an (2 CP/ compute system eithe o 16-bi (specif which). .rm 109  .cn St. Benedict's Farm .cn Box 366 .cn Waelder, TX 78959 .cn (512)540-4814  an thei associate Margins The i additio t al this ther shoul b som wa t toggl o an of suc thing a Shado Printing, Expande Print an wa t Rol Bac U Lin a tim (fo possibl printin i columns) The ther ar th option o har an sof hyphen t consider whic Wordsta user ar s familia with Al thes things plu th Centerin Nex Lin feature are included in our program: .cn PSFORMAT PSFORMA i availabl fro St Benedict' Far fo $1 postpai i th US I ha als bee place i th publi domai a "use supported software Mos popula dis format ar supported bu yo mus tel u wha yo need REQUIRED (1 TI-85 printer o course wit P font anDOTCMD: dc$=ucase$(left$(a$,3)):dval%=val(right$(a$,len(a$)-3)) if dc$=".PA" then gosub FORCED.EOP if dc$=".CP" then \CONDITIONAL PAGE if (dval%+lin%) > (page.len%-(top.margin%+bottom.margin%)) then \ gosub FORCED.EOP if dc$=".OP" then page.numbering%=false% if dc$=".PN" then page%=dval% if dc$=".PL" then page.len%=dval% if dc$=".MT" then margin.top%=dval% if dc$=".MB" then margin.bottom%=dval% if dc$=".RM" then right.mar%=dval%:gosub DPLSET if dc$=".HE" then header$=right$(a$,len(a$)-4) if dc$=".HM" then heading.mar%=dval% if dc$=".FO" then footing$=right$(a$,len(a$)-4) if dc$=".FM" then footing.mar%=dval% if dc$=".PO" then \ if dval%>0 then \LEFT MARGIN CANNOT BE ZERO!! page.offset%=dval% \RESETS LEFT PRINTER MARGIN ELSE page.offset%=1 if dc$=".PO" then \ print chr$(27)+chr$(9)+chr$(page.offset%)+ \ chr$(27)+chr$(57);:gosub DPLSET if dc$=".JN" then right.justify%=true% if dc$=".SP" then spacing%=dval% if dc$=".CN" then center.next.line%=true% return +"6# x+:`i* ">"/##~>;+> 6*s#r w+͊1>2 u+#w+>36*s#rw+6*xDM"+ڍ+s#r#À+! æ+>2:*ã+6*x+Á*~#ʽ+#~+ҽ+~+x 6*s#rw+ɯ2,x_O:*+2,x_O6*9w#w+x,+r+s=,w>#w+Á*~7^#VE,E,!~ѧ7x1P*x1~7!~#fo~ʁ,7,#~+~w}D#wx#1]*KÄ,!9*?>":u,2g>2u:u, PJ-,O:u,-!l{Ps",͖Q!-gQH-*fx-͸QP'-͌Q!l>P͍PH-@]T}_|H-)>-x1P*I&>4ͺ-K3y=d-e#x2#~+Œ-x-xGe#>.xʛ-e#>.xG ʩ->.x#~+!.Ϳ!0!1u'#! ͕()) )& Z' ͽ'  !,+!,+! ,!,+!R,++('!,!,+!/++!,!,+!,++!,!++!+!,!'+$+!,!#+'+!,*+! ,-+! ,0+ͫ%!+!*+$͕%!$͕%!<$͕%!<$͕%!<$͕%!3<$͕%!<$͕%!K<$͕%!<$͕%!<$͕%!<$͕%!3<$͕%!<$͕%!~<$!M5"Ͳ !3!3!3,3!",!I,|g}o|%!3x-R(Z'6u'9!:͕(3!T,>+!>͂-|)2!>͂-}_o|g,!:͔(3Y+&:Z':ͽ':6D!3+3+('A͕%!4$!3$!<$͕%!<$!CEE+!,!E-%('A~͕%!<$!5"Ͳ !H!ͽ'Hz('Hz(H('Hv=&H &r!eI%Z'L('A~͕%!^<$!-5"Ͳ !P!ͽ'P~+('P~(P9('Pn=&P(,T+('A~͕%!<$!5"Ͳ !W!ͽ'Wj('Wj(W('Wb('[^͕%!+<$͕%!i<$͕%!3<$͕%!3<$͕%!<$!CEE+!,!E- ͕%!+$!3$!<$͕%!3<$͞@('_!+ͿA3!A!́#c!ͩ#͕%!$!_!$!_͕(8Bf!c+u'!:͕(f!T,i+!,!i-i!I+!,!i-i!+!i͂-}o|g,!:͔(fY+!,!i-('l&:Z':ͽ':Zbc!f+!_͕(B'l$ &_Z'_6!<͕%!$!3$!<$͕%!`<$!CEE+!,!E- ͕%!3<$͕%!3<$͕%!5<$`͕%!$͕%!<$!5"Ͳ !p!(p ('p&pVA&WZ't͕%!3<$͕%!$!3$!<$͕%!3<$!/ͿA3!A!<| M ͕%!3<$͕%!3<$͕%!$!3$!<$!<ͫ%-!0+$`! !xX"&[Z'['tV (t ('tV &tVZ'tM &[VZ'{!{͕(!W͕(k(R(͑'U&{W%&!eI''R ͕%!3<$͕%!<$͕%!y<$͕%!O<$!CEE+!,!E-f ͕%!*+<$x!3-2 ͫ%!3<$ x!7,!I-Z !xx-+x",x+2 x!",!,- !xx-+x7,x+x!7,!,- !xx-+x",x+x!",!I- !xx-+x7,x+ì ('N('N!xx-R(Z'u', !:͕(x!T,͂-)) j'Z'&Z'&:Z':ͽ': &L &r(X(R(Z'&r(!͕(k(R(Z'!͕(,!x+x+('ͳ(' x!7,!,- !xx-+x",x+('ͳ(' ('('i!3+(' ('!xx-R(Z'u'x !:͕(x!T,i+!i͂-R(Z' ! ͕()) j'Z'' Je &Z'q &Z'&:Z':ͽ': x!7,!,- !xx-+x",x+ ( x!",!,- &L(!͕(k(R(Z' '' !͕(,+=&)&L!&Z'('ͳ QV 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0w| 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0í 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 10,12,12,12,12,12,12,12,12,8,10,12,12,14,12,12MR 12,12,12,10,12,12,12,14,12,12,10,10,8,10,10,10 10,10,12,10,12,10,8,10,12,8,8,12,8,14,10,10ó 12,12,10,10,8,10,12,14,12,12,10,10,10,10,10,0ͫ%!T$('!xx-R(Z'u'!:͕(x!T,i+!i͂-R(Z' ' Fͫ%!!$' B!ͫ%!$$' 1('' >A('f' :Q('' 6a('fͳ' J' J! ͕()) j'Z'=&r(,+ͫ%!$ͫ%!i$'ͫ%!'$'ͫ%!i$'ͫ%!&$ͫ%!$'!͕(,+(ͫ%!I$&VZ'ͽ'Iͫ%!I$&VZ' ''kͫ%!I$&VZ'=&'ͫ%!I$&VZ' ''ͫ%!I$&VZ'=&F'ͫ%!I$&VZ'(!+!x-R('X!͕(X(R(Z'& &VZ'ͫ%!͕(,$ͫ%!&$ͫ%!͕(,$!x-R(!&(,+!x-X(R(Z'!x-R(!& &VZ'ͫ%!͕(,$ͫ%!&$ͫ%!͕(,$öͫ%!$&VZ'&:Z':ͽ':ͫ%!3<$!x-+",+('Au'͕%!$&Z'ͽ'`)_"-<<< Printing! Do not disturb! >>>'Rany key, or to quit printing now.(|Insert another sheet of paper, and press successfully printed.<<< Printing file .print, or press if Page 1 is wanted. /Enter the number of the first page you want to (8Program terminated at operator's request1cPress to quit, any other key to print file. successfully filtered.File -Filtering Sector #! Do not disturb! >>><<< Filtering file 2Press to skip, any other key to filter file.36program must do so before trying to print the file..lthe 8th. bit from each character? If not, this0Has this file been filtered previously to remove-top and bottom margins (default 66 lines)? -What is the page length, in lines including .0Default = 0.8 inches, maximum = 2 inches. -aWhat is the page offset (left margin)? -Default = 6.5 inches (about 77 characters). -What is the line length in inches? -Press if wrong, any other key if right.!, is that correct? 7Your file is GB:L .PWordStar and must be present on the disk in B:.Your file must have been `printed to disk' by -What is the NAME of the file to be printed? 3 All Rights Reserved 3 Copyright (c) 1985 Alan T. Chattaway 3N text from WordStar files first printed to disk. 3 Produces Proportionally-Spaced, Right-Justified 3||||| P S R J Version 1.1 |||||3===================================================&N*Q.R2I6`@` nw``LP@@p~[[[[ ?File notDM*"-*##"->22*^#V"##^#V" 2!&!!""!"6#6P>2>2>2kkb_*">:=2|=*y= G:?C ND2=2=2=2=2=2=2=<2=2=Ců2x=E.>ͷEË(Ì(!9"| !E!E!E!R"!O"|> }6#s#r#=>2v>2y>2x2{!o"!$\"~>&2í06#}B|B 1 STOP`*.. . ........͝/*|g:*|  s#r  {3w#6"*|*>24Z!9N#F~#~ ~+~#~ +^#V######|~#fo!' 1 Internal Error - No Line Number o~#ʼ 1 at lineo>ͣ<ڈ͜rͣ<ڈ0ͧG҄͜}_|W!RH~#fo> 1 at address|D1}D1> ͧG> çG~#*RH~#fo;R!9"r!*r"t!"*t!R~Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erro|}}LBʛE&˜E`i"!;"!"ʗ ,rʁͣ31*gI*eI*cI*aIÑͪ33*eIÑͪ3ͷ1*gI*eI ;,Z~# xk/Ñ!>È\/k/+>ڲ "G{,xPX>B !{"Oz"y- b - O{,yġ >B - { < ,> < < B B ͡ >"M u >u M ,u m >u u *( 4:ʛ {,› 6!{"\/O ʛ +~ ʏ #6!{"ɷw#v N#" !9" " y2 *| *!!"A~#*{#FH: ~ʾ!y!!ͣ3 !ͪ3"{#/!;!1*gI*eI*cI*aIH!3*eIH!ͷ1*gI*eI*{#FHl!~#"{#, ¾!:ʾ! ~¾!!"~,"„!#"~ʘ!ʘ!# ‡!þ!"ž!#"{#x"ʳ! ʳ!+~ ʨ!yk/H! 1?Redo from Start * ͝/!!5"* : O * +~+" " " +w "$"++~#fo+" ! 5* ~24"#~#^#V1++͓/EQ:{"*|w"!{"\/k/+*>21: %F#~#fox$W%$$~#G$$Ó/$>"GG:x$ʻG*+~<%=%###~%*ûG!$**~=0%/<W%F%=<%> G$>,GW*#^ ́%{%+={%:={%ͻGz{ړ%{_Å%!"!"2%!"!"2%!~6#w~!%21N%i&È ͣQĮO:hu&͑&͗&u&͑&͗&u&͑&͗&ͣ&u&͑&͗&ͣ&u&͑&͗&u&͑&͗&u&͑&͗&ͣ&u&͑&͗&ͣ&Ͳ&&^#V#&"&*&Ͳ&{&Ͳ&^#͠'ì&Ͳ&^#V#&Á&"&~2&"&*&*&:&G:&H:&&&5NN6ON&KKJIRH~#foNG:hI!'2hI#z^#V#^#V#G^#V#GG^#V#G8'GG^#͠'G^#͠'GÌ'&)))>'>'>'>'>'>^#V#^#V#.(>'>'>'>'>'>^#V#!eI.(> (> (> (> (> (>^#V#!*.(9( Gͩ)M(~#foO(##P^#V#y(6Pn(^#V`(2ä(H(G|}((ø((:()!+K͎M(:+)!/5N:gI2gI:hIG)Q):hI)!)|/g}/o͎M:hIQ)!hIP)ͩ)G)!z:hIgoW*fI|7gm):eIm)+>|)|/g}/oڅ)!ښ)G|ʖ)Í)o& Gȯ|g}oÝ)ͳ)>)~+~?~)+#)+ )*ͷ1eI>"**ͣ3*1aI>"**3eI>WH*~,"?*#"~V*V*# B*}"\*#*x"w*yRH+~ v* k*yk/+^#V#{•*!"">2̓*N#F#*~=*}|**ï**ͪ3*:̃**FH~=ÀFH~,*#"ɧ +*"+V+^"ÆE/L+~##++0>WH+V+^+?++r+s]0+~|/x "W+"U+*W+|}}} }+<~+{*U+چ+~#^#V`i#N#F WH*U+͓/+#N#fi+~#N#fiWHÓ/FO+G#~#fo#~#foxWHy+Ó/6 #+}/,,͓/͓/~#~#foWH|}BK\,PY|}BK M, o_0,z}zd, j,_p,o}`i|/͓/DM ͢,~}#~#fon&͓/z¾,}/~ڻ,s#ñ,}|}!9>k/>,>,>,>,>,>*-!+>->->->->->*-&-~#fo##GNV-yV-#~#fo~#fo_-#U- E- y_-y<.i-)i-)͓/͓/~͓/o&~}#^#V++͓/o&s"--U-ѫ-ծ-G-~--"-W-- -#-W-)-) _!-4-5*-"-~#N#F#.- RH-yx. -+++6@#yw#xw+++6###!-~60.E.-͏.*-#~#~-t!*-"-~#^#V#ڌ.k.RHR.|w.R.++~_w#~Ww#R.E.*-DM~#^#V#..Ø.+z/+{/##{z~#q#p_ʘ.y.x.DMØ.~#.Ø.YP+++"-6@###{_zW+r+sɷ8/*-|/w-^#V+"-w#s#r+++r+s##!?/D/*0{z*0?Z/}|~# `/yG/xWHG/x#N#F& t/E/0]0*0*0eH/͖0ʼ/0]0###ã// 1 during G.C. o/ 1 o 1 Internal Error - String Space Corrup#N#F*-yxX0*-yxX0++`i+V+^eH/##6+6+~6  >@++*-"-s#r+͏.*-#~_#~W҆0Ãr+s##6"-###!-~#foʪ0eHš0<*-"-*-}o|g6@#s#r#6"-*0*0"-}w>#w##eH0++6+6ɢ--|}}}!w|}}}!wɧ~ͧG#=1&1~ͧG#&1G~#B1#41++M10:X1çGSRSұSINǡARPTҙAAIyIDT}HILŃENĄRIT:1*eI}/o|/g#"eI|1Pê1!gI~wɯ2hI:1͎M1*eI1P:1nM>>À3~W#1Wy1!kI1>!kIaI22# 2!kIK!kI2I>>'2>|}+!3Jͭ2͂P+6!gI>1M2`I!3êN!3J!kIJ~_#~W#~OQ8N!d:5NO€2ɇ<o&1P*eI*gIͰ2"eI`i"gI!eI^#V#N#F#!36OͺQx{үQ!iI6͏Pwg>RQ2:1Gw#222!kI2eI:aI:2*eI||<:*eI832!`:22;1;3r2:gI2gI:hIҽ;Ϳ2:hI\3a3g3|/g}/o{3!;:hI҄3Ϳ2"eI>21x2ajz3 L}Ͳ11;>2[1`h{3~&:-3+3+:ڹ4._4e3E4:l3L3q3Q 4:1'4>'4~%l4#}4!~4d'4D>4͇4:::,5>4_{_44B4̉1:!2̈́3: >4܇43:!2!3>4͇4:>4̷11:2T2=:N212DG'6"aI`i"cI#~+ʟ6-v60OxGҟ6#~]6`xE”6y H6>2]1ä6|H6Ì6H6"aI`i"cI͢2#Wͳ8:]16666R960̷2y9+~06.ķ2!7:>"w#6+76-/</ 7:#p#w#6!_1#zҨ7E8J9z&9:{/2=&9ͱ5W7p#6!^1#:1~ \7*\7+p7:-+_:~{0 7#:Ҡ7++wʖ7]7ʠ76%L87h:27x5+6%x272ij87_x&9=9y969e9D7_yĤ4848{_x 8&9=918&9yi9O&9GOy9<8*1=&9PM71ѯR827ij8yĤ4OzWO4r88/< e9/>1Ң9>1p#=™9!aI͟29r2>Ϳ2͢2:?e9ͭ2/{_#zW#yO++9`2#͢2p#9>::>e9N#F#*eI/}o|g*:"eIp#=:e9w1_cƤ~@zZrN vH Tʚ;@B''d #~: : : :0?<=:1:7-++:̓;O ;H ;+;!;{3H#M;';zM!9;7;}0?)))صo9;M!_;];}̓;0? u;? ))))صo_;a{ 3::hI:gIl2:[12\12[1zzʺeʥe)ʺe#úe))ʺe#ʺe#ʺe#)*m&)g~#fo###{eBf>27fO*mf6@#@*s#r6=G~=q#xKw"m>!9e>fe>7f"@f!@fe>e#}LBʛEʘE!' ~ʺ< ʺ<#~¯<`i͖>Ð<>O #~goPY!' ůw>:͐AʶE=ʰE=<ѯáE<ʶE!% ^#Vr+s}A!"v<}LBC= PY9=!0=`i>Ò=!' ~<>B}LBʛE!&a=! ~+ng}LBʛE! n&*~ʕEʪDDM'~<4N#V pʶ=zw w+s#r#6#6DM:=!" s#r#6&>! {zV>;w<><ʶE!! {w:E3>͖>!! ~;!) T>ÌE~#W>*~D( ~ʁ>+~#5O ~+~ʍ>͓>c>7>*T]% N#F+q#p###6 «>>:͐A>>>w+w!(a>7?*' 6#67~ʳE#^#fk_?N#~:?++@ʳEy@ڳEҳES< #h?~.A?T?7-?#.?2_<͓/z ʳEڳE> T?H?> m?H?>;S<<ʪE!C<S<> WH>:S &C"#S<> WH66>~`@<ʶEu@) p# —@A _>;S<<ʪE!S<6# ͈AA>2_.F AA: W:pA> FFFS<1A~*6?# ˆAO!!4¨A#4¨A#4y"½AʶE><"t<>2!E":<2*"x!)ҮC)#ïC))ҽC ҼC#=¤C}_}la)ڹEC#x¹E"C! "!C!) "#C!}o|g͆EDbk:%CID͆EDfDDM*#C*!C͝D"!CPYeD}o|g*C#"CCfDDM*!C*#C͝D"!CPY.D2E*C! ~#fo͆Es#rŒD:EʙD!D!& ý=~# xžDDMEʭED! w!( V6 DzwEʭED! ~!D! ^#V! s#rDMDD͆E}LBʛE&E˜E`i"!6E"cE>!>È|},]E-:ʛE*!N"{/f$%ʁE!zE*lE|}!">6>4>?>=>:>7>5>2>3>@>C>o&È!"!{""{#E:4"E 1?Ep GF:F>\2FFEF+F~F)F+F)FFF!{"2F,F GOE:FBF>\F2FyʬFF7 F ʬF fFEìFFE„FEF> F>FŽF>#F§F6F!{"F)F )Fx<>ʷFyq#F )F> F GF )F,F:4"FwçG>^F@FF~ G> FF#FN* *G#~+<)G=ܻG ̒G̕G ;G4+~# G~=™G*!"G"> G> G:=G> ^> ^*G^#V#Gɷ!eIH!aIGeIHaIHw#w#w#w#HE{,q(H>aI.H>eIH ~#=2H!H#~ EH EHɅo$ɧGw#[H{z :8<o&z(n&z?Hz,z>89(}9$)Њ(,ɞɅÅ(SDES()@((|‡(|ʇÇ͇‡()$$) ((((( ) &&)6#sIͣMrIʮIQOʳI!Q!gIy#«I+žIQ?Q͗JͣQnMI͗JeMzJ!kIͣM8J:hIQ:rI/N1MKL2`I:aI͘LQx/F+N+=·J!kIJ!aI>q#p#=J!aIJ"HJͱJ͝J*HͣMʊQ:hIʊQ!qIN#F͎OMq-KG_L]Mx K KØL!gI9M%Kj0 TeB׳]h!I.k ͗JͣQnMtK͗JeM!kIJ%!hIq#~++w+qKQDNn"~`35zr1{r1h!IͣMQyO2qIKͣMQ:hIzJL/MM%Q NͺQM!iI6͏Pg>R|kP!>MakͣQ!NͮO!NQͣQ!N!hI~+>wQ(P8NQQ:hIʬQKN/O;N(PíNQYPQȯG͎O"NIy2PIFopPyP!D*eI:gIONhI4YQOOg.*NI:PIOzNOg.*eI:gINx<=)O{_zWxG)yOHGjQ(P9OQʯQQ͎Oy+F+F+Fw`h|ʆOgyjO:eIO|g}oxG-|^O}YOìPElaOXO!hI~GxOƀʉQw͂Pw+ɷYQÊQͺQx{үQ!iI6͏PwgOzO >R||Q{>2hIͬP/QPx| QQQQejSX Q Qch|5Q{_zW}o|g!Q"CI"AIx!AI~w#EQ>QQQrQ%J!hIqx!hI|QF#~怩OìQ 4]Qgo"eI"gIͺQs#r#q#pQQͯQQ"eI`i"gI*eI*gIDM^#V#N#F#xyQ:hI:gI7|/G}/O!>Q Q7>{_zW}o|g=Q|g}o&RCZQR o-yOzW{_xG)ReI*gIDM^#V#N#F#xyQ:hI:gI7|/G}/O!>Q Q7>{~_#~W#~OePìP(PÚNQQ>O;N(PíNQYPQȯG͎O"NIy2PIFopPyP!D*eI:gIONhI4YQOOg.*NI:PIOzNOg.*eI:gINx<=)O{_zWxG)yOHGjQ(P9OQʯQQ͎Oy+F+F+Fw`h|ʆOgyjO:eIO|g}oxG-|^O}YOìPElaOXO!hI~GxOƀʉQw͂Pw+ɷYQÊQͺQx{үQ!iI6͏PwgOzO >R||Q{>2hIͬP/QPx| QQ_________________________________________________________________ DOCUMENTATION FOR PSRJ.COM _________________________________________________________________ Version 1.1 September 1985 Copyright (c) 1985 by Alan T. Chattaway. All Rights Reserved. You may use this software for any personal purposes provided you do not sell it, either intact or modified, nor include it in or give it away with any package or product that you offer for sale. _ _ _ _ _ _ _ _ PSRJ stands for Proportionally-Spaced, Right Justified text. It was written in MBASIC for a Canon AP400 typewriter with Canon's AP92 serial interface, driven by an Osborne 1; but since all the character sequences that are machine-dependent (either for the typewriter or the terminal) are in a table at the beginning of the program, and the character widths that may be printwheel- dependent are in a table at the end of the program, the whole program can easily be adapted to other printers and terminals. If you find my program useful, I would like to suggest that you send me a contribution of $10 or more, in recognition of all the time and effort I have put into developing this program. My address is 6666 Arlington Street, Vancouver, BC, Canada V5S 3N9; phone (604) 432-9988. WHAT IT DOES WordStar is my favourite editor, but it does not support propor- tional spacing - at least, not officially, and not at all if your printer is somewhat off the beaten track, such as my Canon AP400 with its AP92 serial interface. WordStar can't even do microjus- tification with this printer, although all the commands are there in the printer to allow a driver to be written. This is that driver. PSRJ was originally written for use with Canon's MODERN and COS- MOS proportional-space printwheels. It has since been installed for many other printwheels, including Qume's THEME 11 printwheel, which has different proportional character widths which are not supported by the Canon typewriter itself, but easily supportable by this program by simply rewriting the character width table at the end of the main body of the program. If the character width table is adjusted accordingly, even fixed- pitch printwheels may be supported; in that case you get micro- justification. Or you can fiddle with the allowed widths for such characters as m's and i's to somewhat improve the appearance of fixed-pitch typefaces like COURIER, or allow additional width for a typeface like ORATOR which looks cramped in its normal 10- pitch appearance. HOW TO FORMAT YOUR TEXT FOR PRINTING WITH PSRJ Use WordStar in the normal way, but with Justification Off (CTRL- OJ). Put the dot commands for No Page Offset and No Page Number- ing (.PO 0 and .OP) at the top of page 1. If you need page numbers, do this with the footer command (.FO) to ensure proper positioning of the page number. Set the right margin so as to have a "full" line after printing. This may be tricky to achieve; for a full-width typing line (6.5 inches, the default setting) the COSMOS typeface requires about 77 characters; THEME-11 about 82; 10-pitch wheels about 66 and 12-pitch about 80. For other typefaces you will have to ex- periment to find the best margin setting to use - use a lower number for a typeface that has generally wider characters. Soft hyphens and non-break spaces may be used in your file, if you wish. Feel free to use headers and footers, but be sure they end in one of the special characters described below so as to force either justification or centering. If the header or footer contains text only at the extreme right side of the page you should force it to be justified; if it is centered, you should force centering. Don't forget that for headers and footers to work, there must be a header or footer margin in effect at the time. The following control characters may be placed in your file to achieve the special effects described here. Do not place other control char- acters in the file, as WordStar will not process them correctly. Table of Control Characters which may be placed in source file: CTRL-W Do not justify this line (works at end of line only - ignored elsewhere) CTRL-R Justify this line (works at end of line only - ignored elsewhere) CTRL-Q Start emphasised (medium dark) printing CTRL-E End of emphasised printing CTRL-C Center this line (works at end of line only - ignored elsewhere) CTRL-A Start boldface (extra-dark) printing CTRL-N End of boldface printing CTRL-F Start underscored printing (spaces included) CTRL-G End of underscored printing CTRL-H No effect (may be implemented in a later version) Note: these are the only control characters that can be placed in the source file without W ordStar creating problems when it prints to its output file. HOW TO RUN PSRJ Save your WordStar file to disk in the usual way, then instead of printing it to your printer, choose the option "Disk File Out- put?" by answering Y (yes) to this question on WordStar's print options menu. WordStar will ask for a filename into which to print the output file. Following the example set by SuperCalc, I usually give this file the same name as the original, but with the extension .PRN at the end of the name. Now exit from WordStar. Before running PSRJ make sure your com- puter is connected to the right printer, and the printer is on- line. Now run PSRJ by simply typing its name at CP/M's A> or B> prompt. Or if you prefer to run the MBASIC source code (for example, if you have modified the source code and don't have access to BASCOM to recompile it), load MBASIC first and then type LOAD "PSRJ" . As PSRJ loads up, your printer should beep (if it has a beeper). Next PSRJ will ask you for the name of your text file and a few other parameters such as the line length, page offset (left mar- gin) and page length. If you just hit in answer to these questions (except when asked for the filename!), PSRJ will supply the default answers displayed with each question. After the last of these questions, PSRJ offers to go through your file and filter off the 8th. bit from every character. This is a bit technical, but it simply means fixing up WordStar's special treatment of some characters in the .PRN file, which is meaning- ful only to WordStar but not to your printer. If you let PSRJ filter the file, you will get a report on the screen showing how many "sectors" have been filtered. If you know the size of your file ahead of time, this can tell you how far along the filtering operation is; there are 8 sectors to each 1K of your file. If your file has never been filtered before, you must let PSRJ do it for you; but if it has, you can save time by skipping the filtering operation; PSRJ then goes directly into printing. It does no harm to filter the file repeatedly, but it does waste some time. As soon as the file is filtered, you are offered the chance to quit now so that you can come back to printing at a later time. As soon as the file has been filtered (or you elect to skip the filtering opera because it has already been done), PSRJ will ask which page to start printing from. Enter the page number, or just press for Page 1. PSRJ will print the file. After each page, PSRJ will buzz your terminal (if it has a buzzer) and ask for more paper. Load another sheet, and press any key on the terminal to continue. WHAT PSRJ DOES TO YOUR FILE PSRJ calculates the total space in any line that should be justi- fied, and spreads it out evenly between the words. It does not put the extra space between the letters within the words; that makes the document hard to read, and also looks unattractive. Typefaces are designed by specially-trained commercial artists, who strive to make them look "right" at a certain spacing between letters; only someone with no appreciation for the fine art of printing would write a program that "stretches" the words to fill the lines! As you probably don't want the spaces between words to become excessively long, you will probably prefer to hyphenate words, so as to keep lines within about 4 - 5 spaces of being "full" on the screen. You can let WordStar's hyphen-help do this for you; when you print to disk, those "soft" hyphens (and also non-break spaces) will become real hyphens and spaces. PSRJ makes some educated guesses about what to do with unusual lines of text, as follows: (1) Lines containing only a single word at the LEFT end of a line obviously can't be justified. PSRJ prints such lines  non-justified, exactly as you saw them on-screen. (2) If there is a single word or short phrase at the RIGHT end of a line, you must force justification (see below how to do this), since all the spaces in front of the phrase otherwise make its exact printed position on the page uncertain. (3) If a line begins with 20 or more spaces, PSRJ assumes it is probably an indented address at the top of a letter or some- thing similar, and will not justify it unless you force justification. Even then you may get overridden by the next rule below. (4) If the spaces between words would need to be wider than twice the normal width of a space, PSRJ will not justify those lines. (5) All other lines will be justified. However, you can delib- erately override this scheme of things by placing one of three special characters at the very end of a line: * The character CTRL-R (for "Regular") forces a lin!e to be justified. * The character CTRL-W (for "Wiggly") forces a line to be non- justified. * The character CTRL-C (for "Center") forces a line to be centered. You put these characters into the file in the usual WordStar way, by prefacing them with a CTRL-P. The main use of CTRL-W is at the end of paragraphs to make sure the last line does not get stretched out. It can also be used at the end of each line in a list, such as the one above. Anywhere else in the line besides the end, these characters are ignored. The other control characters that affect PSRJ are des- cribed above. FINAL WORDS Be patient when using PSRJ. It takes a lot of control characters sent to the printer to do microjustification and proportional spacing. The Canon typewriter is usually rated at 20 characters per second, but working at 1200 baud (the fastest communication speed available from my Osborne 1) the speed drops to just under a third of this. Presumably at 9600 baud it could keep up, but the Osborne can't send at that rate. Don't attempt to print these files directly to the printer from WordStar, because the special use of CTRL-Q, CTRL-E, CTRL-W, CRTL-R and CTRL-C in the file may cause conflicts with your usual installation of WordStar. For example, CTRL-C will cause WordStar to stop and wait for you to type a P to get it started again. PSRJ meets my needs very well; I hope it works for you too. The source code is provided so that you can hack it if you wish; I structured it as well as I could, and included plenty of comments to assist you. If you would like to communicate with me about this program, the best way is to call me on the phone at home in the evening. If I'm not available you should get an answering machine; leave a number and time at which I can call you COLLECT (I'm not rich!) and I will try to get back to you. I have also been known to answer letters, but it may take a while! I make no promises of any future improvements; but in the inter- ests of learning more, I would appreciate hearing about any bugs you may find - especially if you already have the solution! I would also be interested in hearing about installations of PSRJ for other brands of printers. _________________________________________________________________ Alan T. Chattaway September 1985 (604) 432-9988 _________________________________________________________________ ded plenty of comments to assist you. If you would like to communicate with me about this program, the best way is to call me on the phone at home in the evening. If I'm not available you should get an answering machine; leave a number and time at which I can call you COLLECT (I'm not rich!) and I will try to get back to you. I have also been known to answe1000 '===================================================================== 1010 ' P S R J 1020 '===================================================================== 1030 ' 1040 'A program to do proportionally-spaced, right-justified printing 1050 'originally written for the Canon AP400 typewriter and AP92 interface 1060 ' 1070 'Copyright (c) 1985 Alan T. Chattaway Phone (604) 432-9988 1080 'All rights reserved. May not be distributed for commercial gain in 1090 'any way, without permission of the copyright owner. 1100 '_____________________________________________________________________ 1110 ' 1120 'Table of Control Characters which may be placed in the source file: 1130 'Note: these are the only control characters that can be placed in 1140 'the source file without WordStar creating problems when it prints 1150 'to its output file. 1160 '_____________________________________________________________________ 1170 ' 1180 ' CTRL-W No Justification (at end of line only - ignored elsewhere) 1190 ' CTRL-R Justification (at end of line only - ignored elsewhere) 1200 ' 1210 ' CTRL-Q Emphasised 1220 ' CTRL-E End Emphasised 1230 ' 1240 ' CTRL-C Centre (at end of line only - ignored elsewhere) 1250 ' 1260 ' CTRL-A Bold 1270 ' CTRL-N End Bold 1280 ' 1290 ' CTRL-F Underscore 1300 ' CTRL-G End Underscore 1310 ' 1320 ' CTRL-H (Not Implemented Yet) 1330 '_____________________________________________________________________ 1340 ' 1350 'Defeat MBASIC's automatic carriage return after 80 characters 1360 WIDTH 255 1370 WIDTH LPRINT 255 1380 ' 1390 'Set up table of character widths for Canon PS wheels (Modern, Cosmos) 1400 DIM ROOM(127) 1410 FOR CODE = 0 TO 127 1420 READ ROOM(CODE) 1430 NEXT CODE 1440 ' 1450 '===================================================================== 1460 '|||||| Customize these lines for use with other hardware |||||| 1470 '====================================="================================ 1480 ' 1490 'Set up strings that control this particular terminal 1500 ' 1510 CLS$ = CHR$(26) '(clears terminal screen) 1520 BUZ$ = CHR$(7) '(sounds buzzer in terminal) 1530 GUP$ = CHR$(11) + CHR$(27) + CHR$(82) '(up screen 1 line & delete) 1540 ' 1550 'Set up strings that control this particular printer 1560 ' 1570 SIZE = 120 '(microspaces per inch) 1580 RST$ = CHR$(27) + CHR$(26) + "I" '(initializes printer) 1590 MCS$ = CHR$(27) + CHR$(31) + CHR$(2) '(sets 1/SIZE spacing mode) 1600 EMP$ = CHR$(27) + "R" '(starts Emphasised print) 1610 NRM$ = CHR$(27) + "Q" '(ends Emphasised print) 1620 NMV$ = CHR$(27) + "N" '(don't move after next char) 1630 BEL$ = CHR$(7) '(sounds beeper in printer) 1640 CAR$ = CHR$(13) '(carriage return) 1650 FRM$ = CHR$(12)  '(form feed) 1660 ' 1670 'Initialize typewriter, set to microspacing mode and beep there 1680 ' 1690 LPRINT RST$ + MCS$ + BEL$; 1700 ' 1710 'Clear screen 1720 PRINT CLS$; 1730 ' 1740 'Print greeting 1750 PRINT "===================================================" 1760 PRINT "||||| P S R J Version 1.1 |||||" 1770 PRINT "===================================================": PRINT 1780 PRINT " Produces Proportionally-Spaced, Right-Justified " 1790 PRINT " text from WordStar files first printed to disk. " 1800 PRINT " Copyright (c) 1985 Alan T. Chattaway " 1810 PRINT " All Rights Reserved " 1820 PRINT "===================================================" 1830 ' 1840 'Get filename, line length and other parameters 1850 PRINT: PRINT "What is the NAME of the file to be printed? " 1860 PRINT "Your file must have been `printed to disk' by " 1870 INPUT "WordStar and must be present on the disk in B:", FYLNAM$ 1880 IF FYLNAM$ = "" OR LEFT$(FYLNAM$,1) = " " THEN GOTO 1710 1890 FOR PLACE = 1 TO LEN(FYLNAM$) 1900 HOLDING$ = MID$(FYLNAM$,PLACE,1) 1910 IF ASC(HOLDING$) < 97 THEN GOTO 1930 1920 MID$(FYLNAM$,PLACE,1) = CHR$(ASC(HOLDING$) AND 95) 1930 NEXT PLACE 1940 FYLNAM$ = "B:"+FYLNAM$ 1950 ' 1960 UP = 3: GOSUB 4780 1970 PRINT "Your file is "; FYLNAM$; ", is that correct? " 1980 PRINT "Press if wrong, any other key if right." 1990 RESPONSE$ = INPUT$(1) 2000 IF RESPONSE$ = CHR$(27) THEN GOTO 1710 2010 ' 2020 UP = 2: GOSUB 4780 2030 PRINT "What is the line length in inches? " 2040 INPUT "Default = 6.5 inches (about 77 characters). ", LYNLEN 2050 IF LYNLEN > 12 THEN LYNLEN = 12 2060 IF LYNLEN = 0 THEN LYNLEN = 6.5 2070 TOTSPAC = INT((LYNLEN * SIZE) + .5) '(microspaces per line) 2080 ' 2090 UP = 2: GOSUB 4780 2100 PRINT "What is the page offset (left margin)? " 2110 INPUT "Default = 0.8 inches, maximum = 2 inches. ", OFFSET 2120 IF OFFSET > 2 THEN OFFSET = 2 2130 IF OFFSET = 0 THEN OFFSET = .8 2140 MARGIN$ = SPACE$(SIZE * OFFSET) 2150 ' 2160 UP = 2: GOSUB 4780 2170 PRINT "What is the page length, in lines including " 2180 INPUT "top and bottom margins (default 66 lines)? ", LYNES 2190 IF LYNES > 112 THEN LYNES = 112 2200 IF LYNES = 0 THEN LYNES = 66 2210 LYNCOUNT = 0 2220 '_____________________________________________________________________ 2230 ' 2240 'Start working here; first, strip 8th. bits from all characters 2250 PRINT CLS$ + "Has this file been filtered previously to remove" 2260 PRINT "the 8th. bit from each character? If not, this 2270 PRINT "program must do so before trying to print the file.": PRINT 2280 PRINT "Press to skip, any other key to filter file." 2290 RESPONSE$ = INPUT$(1) 2300 IF RESPONSE$ = CHR$(27) THEN GOTO 2630 2310 ' 2320 'Start filtering the file 2330 PRINT CLS$ + "<<< Filtering file "; FYLNAM$; "! Do not disturb! >>>" 2340 PRINT 2350 RESET : SECTORNUM = 1 2360 OPEN "R", #1, FYLNAM$, 128 2370 FIELD #1, 128 AS SCTR$ 2380 PRINT "Filtering Sector #"; SECTORNUM 2390 GET #1, SECTORNUM 2400 SECTOR$ = SCTR$ 2410 FOR PLACE = 1 TO 128 2420 CHAR$ = MID$(SECTOR$,PLACE,1) 2430 IF CHAR$ = CHR$(15) THEN CHAR$ = " " 'non-break space 2440 IF CHAR$ = CHR$(31) THEN CHAR$ = "-" 'soft hyphen 2450 MID$(SECTOR$,PLACE,1) = CHR$(ASC(CHAR$) AND 127) 2460 IF CHAR$ = CHR$(26) THEN EOFLAG = 1: GOTO 2480 2470 NEXT PLACE 2480 LSET SCTR$ = SECTOR$ 2490 PUT #1, SECTORNUM 2500 IF EOFLAG = 1 THEN GOTO 2520 2510 SECTORNUM = SECTORNUM + 1: GOTO 2380 2520 CLOSE #1 2530 ' 2540 'Offer opportunity to quit 2550 PRINT "File "; FYLNAM$; " successfully filtered." 2560 PRINT "Press to quit, any other key to print file." 2570 RESPONSE$ = INPUT$(1) 2580 IF RESPONSE#$ <> CHR$(27) THEN GOTO 2630 2590 PRINT: PRINT: PRINT "Program terminated at operator's request" 2600 END 2610 '_____________________________________________________________________ 2620 ' 2630 PRINT CLS$;: PRINT "Enter the number of the first page you want to " 2640 INPUT "print, or press if Page 1 is wanted. ", PAGNUM 2650 IF PAGNUM = 0 THEN PAGNUM = 1 2660 SKIPLYNES = ((PAGNUM - 1) * LYNES) 2670 PRINT: PRINT "<<< Printing file "; FYLNAM$; "! Do not disturb! >>>" 2680 PRINT 2690 ' 2700 'Open the file for sequential line output 2710 OPEN "I", #1, FYLNAM$ 2720 ' 2730 'Check for End-Of-File; if so, eject paper and stop program 2740 IF EOF(1) THEN GOTO 2750 ELSE GOTO 2780 2750 PRINT: PRINT: PRINT "File "; FYLNAM$; " successfully printed." 2760 CLOSE: LPRINT CAR$ + FRM$;: END 2770 ' 2780 'Get one line from the file and increment line counter 2790 LINE INPUT#1, LYN$ 2800 LYNCOUNT = LYNCOUNT + 1 2810 IF SKIPLYNES = -1 THEN GOTO 2850 2820 IF SKIPLYNES = 0 THEN SKIPLYNES = -1: GOTO 2940 2830 SKIPLYNES = SKIPLYNES - 1: GOTO 2790 2840 ' 2850 'Check for end of page using integer division and finite difference 2860 '(This method of comparison gets around round-off errors in MBASIC) 2870 PREVLYN = LYNCOUNT - 1 2880 IF ABS(PREVLYN\LYNES - PREVLYN/LYNES) > .001 THEN GOTO 2940 2890 PRINT: PRINT BUZ$: PRINT "Insert another sheet of paper, and press 2900 PRINT "any key, or to quit printing now." 2910 RESPONSE$ = INPUT$(1): IF RESPONSE$ = CHR$(27) THEN GOTO 2590 2920 PRINT CLS$ + "<<< Printing! Do not disturb! >>>" 2930 ' 2940 'If line empty, print it and return for another 2950 IF LYN$ <> "" THEN GOTO 2980 2960 LPRINT: GOTO 2730 2970 ' 2980 'Trim any redundant blanks from end of line 2990 WHILE RIGHT$(LYN$,1) = " " 3000 LYN$ = LEFT$(LYN$,(LEN(LYN$)-1)) 3010 WEND 3020 ' 3030 'Trim CTRL-C character from START of line (WordStar page break) 3040 IF LEFT$(LYN$,1) <> CHR$(3) THEN GOTO 3070 3050 LYN$ = RIGHT$(LYN$,(LEN(LYN$) - 1)) 3060 ' 3070 'If line ends in a "Justify-CENTRE" marker (CTRL-C), trim left spaces 3080 IF RIGHT$(LYN$,1) <> CHR$(3) THEN GOTO 3280 3090 LYN$ = LEFT$(LYN$,(LEN(LYN$)-1)) 3100 WHILE LEFT$(LYN$,1) = " " 3110 LYN$ = RIGHT$(LYN$,(LEN(LYN$)-1)) 3120 WEND 3130 ' 3140 'Find length of printable part of centered line 3150 TOTROOM = 0: THISROOM = 0 3160 FOR PLACE = 1 TO LEN(LYN$) 3170 THISROOM = ROOM(ASC(MID$(LYN$,PLACE,1))) 3180 TOTROOM = TOTROOM + THISROOM 3190 NEXT PLACE 3200 ' 3210 'Calculate spaces needed to centre line, add them, and print line 3220 SPAC = (TOTSPAC - TOTROOM + .5) \ 2 3230 SPACHAR = (SPAC + .5) \ ROOM(32) 3240 LYN$ = SPACE$(SPACHAR) + LYN$ 3250 NOJUST = 1 :GOSUB 3930: NOJUST = 0 3260 GOTO 2730 3270 ' 3280 'If line ends in a "No Justify" marker (CTRL-W), print it "as is" 3290 IF RIGHT$(LYN$,1) <> CHR$(23) THEN GOTO 3340 3300 LYN$ = LEFT$(LYN$,(LEN(LYN$)-1)) 3310 NOJUST = 1: GOSUB 3930: NOJUST = 0 3320 GOTO 2730 3330 ' 3340 'Count room taken by non-space characters and by space characters, 3350 'as well as total number of spaces in the line 3360 TOTROOM = 0: THISROOM = 0: CHAR$ = "": CODE = 0: NUMSPAC = 0 3370 FOR PLACE = 1 TO LEN(LYN$) 3380 CHAR$ = MID$(LYN$,PLACE,1) 3390 CODE = ASC(CHAR$) 3400 THISROOM = ROOM(CODE) 3410 IF CODE <> 32 THEN TOTROOM = TOTROOM + THISROOM: GOTO 3430 3420 NUMSPAC = NUMSPAC + 1 3430 NEXT PLACE 3440 ' 3450 'If line ends in a "Do Justify" marker (CTRL-R), then justify it 3460 IF RIGHT$(LYN$,1) <> CHR$(18) THEN GOTO 3500 3470 LYN$ = LEFT$(LYN$,(LEN(LYN$)-1)) 3480 GOTO 3560 3490 ' 3500 'Don't justify lines having only one word 3510 IF NUMSPAC = 0 THEN GOTO 3310 3520 ' 3530 'Don't justify lines that are deeply indented (address of letter) 3540 IF LEFT$(LYN$,20) = SPACE$(20) THEN GOTO 3310 3550 ' 3560 'Calculate microspaces available for each space character 3570 MICROS = (TOTSPAC - TOTROOM) \ NUMSPAC 3580 ' 3590 'Assume that if spaces are too wide, line not to be justified 3600 IF MICROS > 2 * ROOM(32) THEN GOTO 3310 3610 WIDESPAC$ = SPACE$(MICROS) 3620 ' 3630 'Deal with leftover microspaces due to integer division above 3640 SPARES = (TOTSPAC - TOTROOM) - (MICROS * NUMSPAC) 3650 ' 3660 'Now print the line 3670 NOJUST = 0 3680 GOSUB 3930 3690 ' 3700 'End of line; go back for another line 3710 GOTO 2730 3720 ' 3730 '===================================================================== 3740 '||||||| Change this table if using a different printwheel! |||||| 3750 '===================================================================== 3760 ' 3770 'Table of character widths follows (for Canon PS printwheels). 3780 'The 128 characters are in ASCII order from NUL to DEL; widths are 3790 'given in 1/(SIZE)ths. of an inch and MUST be an EVEN NUMBER! 380$0 ' 3810 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3820 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3830 DATA 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 3840 DATA 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 3850 DATA 10,12,12,12,12,12,12,12,12,8,10,12,12,14,12,12 3860 DATA 12,12,12,10,12,12,12,14,12,12,10,10,8,10,10,10 3870 DATA 10,10,12,10,12,10,8,10,12,8,8,12,8,14,10,10 3880 DATA 12,12,10,10,8,10,12,14,12,12,10,10,10,10,10,0 3890 ' 3900 'End of program; subroutines follow 3910 '_____________________________________________________________________ 3920 ' 3930 'SUBROUTINE to print a line, either justified or non-justified 3940 'Start to print the line; first the left margin 3950 LPRINT MARGIN$; 3960 ' 3970 'This section prints characters of correct proportional width 3980 SPACLEFT = NUMSPAC 3990 FOR PLACE = 1 TO LEN(LYN$) 4000 CHAR$ = MID$(LYN$,PLACE,1) 4010 CODE = ASC(CHAR$) 4020 ' 4030 'Handling of control characters for special effects 4040 IF CODE = 5 THEN LPRINT EMP$; 'CTRL-Q 4050 IF CODE = 17 THEN LPRINT NRM$; 'CTRL-E 4060 ' 4070 IF CODE = 1 THEN BLDFACE = 1 'CTRL-A 4080 IF CODE = 14 THEN BLDFACE = 0 'CTRL-N 4090 ' 4100 IF CODE = 6 THEN UNDSCOR = 1 'CTRL-F 4110 IF CODE = 7 THEN UNDSCOR = 0 'CTRL-G 4120 ' 4130 'Control characters are not to be sent to the printer 4140 IF CODE < 32 THEN GOTO 4650 4150 ' 4160 'Spaces are handled by a different section of this subroutine 4170 IF CODE = 32 THEN GOTO 4370 4180 THISROOM = ROOM(CODE) 4190 SIDECHAR$ = SPACE$(THISROOM/2) 4200 ' 4210 'Print left half of char's room, then character itself 4220 LPRINT SIDECHAR$; 4230 LPRINT CHAR$;: GOSUB 4730 4240 ' 4250 'Check for boldface; if required, do it now 4260 'but first, check for underscore and set "no move" 4270 IF UNDSCOR = 1 THEN LPRINT NMV$; 4280 IF BLDFACE = 1 THEN LPRINT CHAR$;: GOSUB 4730 4290 ' 4300 'Now check again for underscore; if required, do it now 4310 IF UNDSCOR = 1 THEN LPRINT "_"; 4320 ' 4330 'Finish printing the character's room and go get next character 4340 LPRINT SIDECHAR$; 4350 GOTO 4650 '(returns to repeat the loop) 4360 ' 4370 'This section prints spaces of correct width for each case 4380 'If line not to be justified, all spaces are standard width 4390 IF NOJUST = 1 THEN WIDESPAC$ = SPACE$(ROOM(32)): GOTO 4500 4400 ' 4410 'Use up spare microspaces left by integer division 4420 IF SPARES = 0 THEN GOTO 4500 4430 LPRINT " ";: SPARES = SPARES - 1 4440 IF SPARES > SPACLEFT THEN LPRINT " ";: SPARES = SPARES - 1 4450 IF SPARES > (2 * SPACLEFT) THEN LPRINT " ";: SPARES = SPARES - 1 4460 IF SPARES > (3 * SPACLEFT) THEN LPRINT " ";: SPARES = SPARES - 1 4470 IF SPARES > (4 * SPACLEFT) THEN LPRINT " ";: SPARES = SPARES - 1 4480 IF SPARES > (5 * SPACLEFT) THEN LPRINT " ";: SPARES = SPARES - 1 4490 ' 4500 'Now print a space of calculated width, and decrement space counter; 4510 'but first check whether underscores are required, act accordingly 4520 IF UNDSCOR = 0 THEN GOTO 4620 4530 THISPAC$ = WIDESPAC$ 4540 IF LEN(THISPAC$) <= ROOM(32) THEN GOTO 4580 4550 FRONT = ROOM(32) \ 2: BACK = ROOM(32) - FRONT - 1 4560 LPRINT SPACE$(FRONT);: LPRINT "_";: LPRINT SPACE$(BACK); 4570 THISPAC$ = SPACE$(LEN(THISPAC$) - ROOM(32)) 4580 FRONT = LEN(THISPAC$)\2: BACK = LEN(THISPAC$) - FRONT - 1 4590 LPRINT SPACE$(FRONT);: LPRINT "_";: LPRINT SPACE$(BACK); 4600 GOTO 4630 4610 ' 4620 LPRINT WIDESPAC$; 4630 SPACLEFT = SPACLEFT - 1 4640 ' 4650 'Get next character in line and continue printing 4660 NEXT PLACE 4670 ' 4680 'End of subroutine 4690 LPRINT 4700 RETURN 4710 '_____________________________________________________________________ 4720 ' 4730 'SUBROUTINE decrementing room on char's right (allows for char itself) 4740 SIDECHAR$ = LEFT$(SIDECHAR$,(LEN(SIDECHAR$)-1)) 4750 RETURN 4760 '_____________________________________________________________________ 4770 ' 4780 'SUBROUTINE to clear messages off screen line by line 4790 FOR GOINGUP = 1 TO UP: PRINT GUP$;: NEXT GOINGUP 4800 RETURN 4810 '_____________________________________________________________________ TO UP: PRINT GUP$;: NEXT GOIPSFORMATBASDVWXYZ[\]^PSFORMATDOC_`abPSJUST BAScdePSNCLUDEBASfghPSVALUESLRGijkPSVALUESSMLlmnPSWRAP BAS opqrPSDEMO SAMstuPSDOTCMDBASvPSRJ COMwxyz{|}~PSRJ COM#PSRJ DOCePSRJ $$$PSRJ $$$% This is the release date of the disk. PSVALUESLRG i PSVALUESSML l PSWRAP BAS oPSDEMO SAM s PSDOTCMDBAS vPSRJ COM wQSRJ COM PSRJ DOC 2PSRJ BAS ASRJ BAS PSFORMAT.BAS CC 94 8704 68 PSFORMAT.DOC 33 80 3968 31 PSJUST .BAS 69 50 3072 24 PSNCLUDE.BAS A5 8F 2176 17 PSVALUES.LRG B3 38 2432 19 PSVALUES.SML 51 FB 2432 19 PSWRAP .BAS 5F 83 4096 32 PSDEMO .SAM A7 A5 2304 18 PSDOTCMD.BAS 68 A9 1024 8 PSRJ .COM 32 5A 20864 163 PSRJ .DOC A0 67 12928 101 PSRJ .BAS 4C D7 16768 131  Fog Library Disk FOG-CPM.026 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Proportional printing of text files for some of the popular printers, footnoting, searching multiple files, and locating unmatched control codes are the functions of these programs for WordStar and other word processing programs. Filename Description -02-00 .86 This is the release date of the disk. -CPM026 .DOC This is the description of the disk contents. FIND52 .COM EE4D 3K ver. 5.2 [FIND 1 of 2] Search for character strings in files or group of files. Excellent for finding that word or phrase you know is somewhere in one of your files. FIND52 .DOC 8489 12K ver. 5.2 [FIND 2 of 2] FTNOTE .COM AE8A 17K ver. 1.4 [Footnote 1 of 3] Allows WordStar printing with footnotes at the page bottom. FTNOTE14.DOC 7950 26K ver. 1.4 [Footnote 2 of 3] FTNOTE14.INF F83C 2K ver. 1.4 [Footnote 3 of 3] JUKI .BAS 193D 11K [Juki 1 of 2] Proportional spacing with a Juki 6100 printer (written for MBasic but can be modified for you Basic). JUKI .DOC 9D3E 8K [Juki 2 of 2] PAIRX .COM 41AA 1K [Pair Checker 1 of 2] Prints the list of page numbers with unmatched control codes (in text files). Excellent for spotting the missing "toggle" for WordStar's ^PS, ^PD, etc. PAIRX .DOC 3117 3K [Pair Checker 2 of 2] PSFORMAT.BAS CC94 9K [PSFORMAT 1 of 9] Proportional space printing for Texas Instruments 855, written with CBasic but source is included so it can be modified for your Basic or printer. PSFORMAT.DOC 3380 4K [PSFORMAT 2 of 9] PSJUST .BAS 6950 3K [PSFORMAT 3 of 9] PSNCLUDE.BAS A58F 3K [PSFORMAT 4 of 9] PSVALUES.LRG B338 3K [PSFORMAT 5 of 9] PSVALUES.SML 51FB 3K [PSFORMAT 6 of 9] PSWRAP .BAS 5F83 4K [PSFORMAT 7 of 9] PSDEMO .SAM A7A5 3K [PSFORMAT 8 of 9] PSDOTCMD.BAS 68A9 1K [PSFORMAT 9 of 9] PSRJ .COM 325A 21K [PSJR 1 of 3] Proportionally-Spaced, Right Justified printing program for Canon AP400 and AP92 printers. Includes MBasic source so it can be modified for other printers. PSRJ .DOC A067 13K [PSJR 2 of 3] PSRJ .BAS 4CD7 17K [PSJR 3 of 3] P .BAS 5F83 4K [PSFORMAT 7 of 9] PSDEMO .SAM A7A5 3K [PSFORMAT 8 of 9] PSDOTCMD.BAS 68A9 1K [PSFORMAT 9 of 9] PSRJ .COM 325A 21K &'