IMD 1.16: 29/05/2007 18:57:11 FOGCPM.083 --FOGCPM083BASLIST COMx BASLIST BAS&BASLIST2COM !"#$%&BASLIST2COM'()-06-00 86 BASLIST2DOC}*+,-./0123456789BASLIST2BAS*:;<=>?DESK-DM BAS@ABCDEFGHIJKLMNODESK-DM BASUPQRSTUVWXYZ-CPM083 DOCDESK-DM DOC[\]CALC-DM BAST^_`abcdefghDDISK-DMBASijkIDENT-DM lINIT-DM BASmDUCK BAS5nopqrstGRADES BASJuvwxyz{|}~REPEAT BAS+TYPEFASTBASTYPEFASTBAS TYPING BAS MAKEMENUDOCMAKEMN8BBASMAKEMNZ2BASTELEPHONBAS=INDEX ROLO This is the disk name. ~<ʣ/̈́!&6# ͹+9+̈́')2&!&͵+!&͵!Ûct~!{2!ʹ!!!!!!!!!V!!!&!!! !!! !!! !!!f !!! !!!6 !!! !!! !!!! 5 ! k!͊! ͌! l!! m!! m|g}o|5 l!! m!! m|g}o|T5 l!u !!T þ!$ k!͊! k!͊!p+ P ?5 !l Z! k!͊!p+ P ?5 !h k!"͊"!e ͌"! l"!! m"!! m|g}o|,5 %{"!! m"!! m|g}o|c5 %{!u !)!C ! k!,͊5 /! k!3͊3! ͌3! l3!! m3!! m|g}o|"3!! m3!! m|g}o|H! !3! È5 /!f k!6͊!b 66!75 95 =!^ 6,!7!|!A͊!AY|¶!ʹ!ʹ! ! !{2ä!{2!^ 6,!7!2|’D! lG! l!ʹͶr!2|!|!A͊Ͷ-!ʹ!  B! ʹ/Z!h! ʹ!{2!ʹÒ!!*!!,! !=! /!h!!*!!,! !=!h!  !!*!!,! != #! 5 95 J5 N5 R5 V!AOb P ZH ^mͶ1ͦVP V!b͆ A!9flVͶ1ͦVD!f|g}o|5 ^D%!"ʹ!f͌ RP R+Rf! ͌Ͷ1!ʹ!f͇Ͷ ͦbP b bZ_Ͷ1!J͆ bJ͞ A9ili! ͌]NA!G#b P l !l͆ !ͳNͳ/|g}o|!h!l͆ ! !i/!h!iN !l͆ !!i5 Jb5 Nͦ9P 95 Vl5 ^9j 5 9ͦ=P = j ! ʹͳ/9|g}o|ʒ !h! ʹ?9 Ͷr!fYb P pͦpP p!p͆ ʹ!bl An  : Page  Page #  END of File );=F SORRY, THE FILE YOU SPECIFIED IS NOT IN ASCII FORMAT (IT IS TOKENIZED)a Ie O3i Please enter filename for disk storage of listing  was invalid. Please re-enter. Your entry of 8 Output listing to Disk File (Y)es or (N)o {DEFAULT=N} 4 Please enter the filename of program to be printed F was invalid. Please re-enter.h Gk Multistatement lines one statement per line (Y)es or (N)o {DEFAULT=Y} 6 Please enter number of lines per page (Default is 60) 6 Maximum number of characters per line (Default is 80) -' Please enter Date and Time (MM/DD/YY HH:MM) W was invalid. Please re-enterx Your input of  n N y Y 6 Output listing to printer (Y)es or (N)o {DEFAULT=Y}  - | message on all copies. Thanks.  |- | copied. Please leave this sign-on |-9 | PUBLIC DOMAIN SOFTWARE. May be freely |-i | (C) 1985 Easley, SC 29640 |- | 102 Evergreen Street |- | PROGRAM BY: Thomas S. Cox |- | |-)| (ASCII FORMAT) September 21, 1985 |-Y| BASIC PROGRAM LISTER Version 2.01 |-| BASLIST.BAS |----------------------------------------------p Zdnortv x"z7|L~avly{"H"6V,h-t.0136r@|Jh-r-BZ`or#-I_1 m4 */ )>.H1 O ]       9 j    [[[[ BASLIB #980007 5.1 - OWNED BY MICROSOFT, 1979 <ååU:x<=DM*"o!*$##"m!k>22*^#V"##^#V"!e"b6#6P>2i>2h>2g͟ ͢ _;ƀt=|<{>!9"/**ʃ!6#}ƒ|ƒ6!56#z–*|ʷ> 6#s#r#=¬>2)>2,>2+2."1!$"<;b$ͷ$ STOX*<.. . .........R#*J|:G\*E|\[* s#r* {w#6"H*/*E>2GXͷ$Error -!~<ʂ=ʂ#~#yn#ͽ$Syntax Error in DATRETURN without GOSU Type MismatcOut of DatIllegal Function CalFloating OverfloInteger OverfloOut of Memor Subscript Out of Rang Division By ZerOut of String SpacString Formula Too CompleRESUME without Erro2Field Overflo3Internal Erro4Bad File Numbe5File Not Foun6Bad File Mod7File Already Ope9Disk I/O Erro:File Already Exist=Disk Ful>Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erro!9N#F*~#~Ҍ~+ʒ~#~ڌ+^#V###j###j|ʞ~#fo!ͷ$ Internal Error - No Line Number $*~#:ͷ$ at line[X>!<!<0ͩ:}_|W!0͹;~#fo>ͷ$ at address|C}CX> ͩ:> é:!9"'*'|b}B7ʗ8ʘ”8`i":!"R!'"T ,;'<%*<*<*<*<͊&*<%%*<*< ­,Z;~# x7#l!>;(#7#o84 K;"`G{,x`PX84ڮ!Oz"yʙ  ™O{,y84ڮ ™{ ʨ,> ʨʨʮʮ84e"ʹ 84 ʹ, 84 *:% 46!ɷw#++>͍2+V+^++r+s̈́~#^#V4|) ̈́!9>4+͌* { 1S|) }* b2$:]F#~#fox1͸ʯ~#:ã͸H#>":G:axʽ:*b+~<=###~*Xý:!l*^*b~=/<1 = %:]> :>,:W*b#^ TN+=Nͽ:z{f{_Xb|¢}B7ʁ”8`i":++"b!"X!"V2]l2?1}o|g> :+|¿ý:!e"b!":2]!h"b!":2]!`~6#w~!1Nli& G~#A#3++L0:Wé:|}!iw2p|t+ {_{"j"l~Ҏ_*j o gC#~#fox;;H#*l*j!54!9"/^#V#!5~w!9"/9xű y<2F~;;#~#foy͹;O #~#fox?/#?!4 2H#H#*&~H#o&~#^#V++H#o&b~<"~#~#fo;;6+(.'<%H#H#>!>!>!>!>!>^#V#^#V#:>!>!>!>!>!>^#V#!<:>!>!>!>!>!>^#V#!s:>>>>>>^#V#^#V#:>F>F>F>F>F>^#V#!s:>o>o>o>o>o>!!+>Ó>Ó>Ó>Ó>Ó>!ʢ~#fo##];^#V#bBì^#R;ò];^#V#b%C^#R;^#V#͏;|bBKAPY|bBK 2 o_zbzI O_Uo _ W}7#H#DMb#ԩ~##++#>;;+V+^+ʜ+r+s$bo~#^#V7#|b!9>7#+ *b{<ͽ:{=> :|}*b< }|}| !*b#n& @^#V#^#V#m;];^#V#@++*q!"q!s#r+`"*k!#~_#~W;$l r+s##6"o!###!q!~#fo_$;O$<*m!"k!*o!}o|g6@#s#r#6"o!*$*$"q!}w>#w##;Š$++6+6s!!F~ͩ:#=«$ͽ$~ͩ:#ý$Ƥ~@zZrN vH TB.%*<}/o|/g#"<|I%ͤD%!<~wɯ2>&~ #N% $!!<<2s%# r%!>ڕ%>|}+! 'V>&E+6!<>͗@2!~_#~W#~OZFB!-BvD%ɇ<o&I%äD*<*<&"<`i"ͥFaFW&:$Gw#W&R&l&!<S&2$%aj& L} %F% />2$`h&~&].-@'+@'+(.#(.'eR'E|'(.lj'Lj'qj'Q{':$ʕ'>Õ'~%'#'!'dʕ'D¬''(.S.(.ږ(¬'_{_((°'$B.!%&B. ¬''@'#%&ì''#ì'%%<%B.'&%=B.%%DG)"<`i"<#~+*-)0OxG*#~)`xE)y Ұ)>2$ *|Ұ))ð)"<`i"<&#W,:$:*D*H*H*ʹ,60%&,+~0W*.%&ʉ*B.>"w#6+z*6-/</ |*:#p#w#6!$#z +ڧ+ͬ,z,s-{̝%=,)ʿ*p#6!$#:$~ ***+*(.-+$0+#(.+++w**+6%ڮ+&+-͂%4+(+6%%+J&,Y+_x,͟,,Ę,,ì*_y(d+(f+{_x+,͟,Ó+͈,y,O͈,GO,ž+*$=,Põ*3%ѯʴ+J&7,y(OzWO(++/< ,/>i%->i%p#=,!< &7-%>-&&.?,&/{_#zW#yO++K-%#&p#=->y-.>,N#F#*</}o|gҌ-"!)/)#/))/ /#=/}_}la)ڵ80#xµ8"%/! "'/!& ")/!}o|g͂8>0bk:+/ʄ0͂8S0͡0DM*)/*'/0"'/PY͠0}o|g*%/#"%/!0͡0DM*'/*)/0"'/PYi028*%/! ~#fo͂8s#r0:80!0!# 13~# x0DMA1ʩ861! w!% V6 1zw?1ʩ861! ~!11! ^#V! s#rDM.1(1͂8 : Gf1. Y1:a ‚1<2a *^ "1!1"^ ʘ15 *x 654> 1~=˜1* ! " 1" > 1> 1> 5 > 5 *11 G21~#fo1##2 Gb}B7ʗ8ʔ8!$ ~:2#~/2`i32>O #~goPY!$ ůw'4ʬ8j2ѯÝ8<ʲ8!" ^#Vr+sb}%7}B7ʷ2 PY­2!2`i>3!$ ~E2'47b}B7ʗ8!#2! ~+ngb}B7ʗ8! n&*:~ʑ80DM$~B24N#V p*3zw w+s#r#6#6DM! {zV~3N1w<|3<ʲ8!! {w:8“33!! ~N1!& ̴3B2̴3È8~# ·3*:~1% ~3+~#5O ~+~3337>*:T]" N#F+q#p###6 4'4= 4>w+w!%37?*:$ 6#67~ʯ8#^#fk_p4N#~:t4++@ʯ8y@گ8ү81 #4~.ž4ͱ47Ê4#‹421H#z ʯ8گ8> ñ4ʥ4> 4å4bS4N11<ʦ8!11> ;;S4:1!1µ81< 81*1~ʔ8#N#F++H# O^5I^5R”8*2|^5!"2}_B7q57{B7£8zS4 //":#1> ;;66'4~½5<ʲ85<5¦8ñ5!"w#w#w#w~53& p# 5%7 _bS4N11<ʦ8b!16# 6e6bS421!16!16N11ʦ8O!O1  ~#9y´6~ ʱ6>.9 ž6:e W:f6> 9991Ž6~*6?# 6"1>2@!8"A:><2>*<"2!97"<"2b%5*N|77##n̓2&7.~2*2ʗ8<ʗ8=_!N~#fof7##{|7++R7*Nͅ7"Nq#p#s#4#5++###DM !P~#foʸ7+V+^##*2{zڊ7BK^#V+"P! DM7*2 DM!$s#r# 6# x7 !NT]~#foʗ8x7y7~#~+*P"Ps#r}B7ʗ8"8”8`i":!28"C_884l!>b|,Y8-:@ʗ8*A!"C{"f$%}8!v8*Ch8|}!":>6>4>?>=>:>7>5>2>3>@>C>lo&!":!"8:j8ͷ$?8p :9:9>\29989+9~9)9+9)999!29,9 :O8:9B9>\929yʬ997 9 ʬ9 f98ì998„989> 9>9Ž9>#9§969!9)9 )9x<>ʷ9yq#9 )9> 9 :9 )9,9:j9wɛXé:>^9@99~ :> 99#9G*b ,:#~+<+:=ܽ: ̔:̗: =:4+~# :~=›:*b!e"b:"b> :> :> > *:: G;:~#fo:##; G;;";>/;~+~?~:;+#G;+ G;&)))t^#V#!<Õ;><~; ~#=™;!~;#~ ʬ; ʬ;Ʌo$ɧGw#;{z}O; =!3~7w?##wy7O*3*3"3"3ajSXP<=(MC-8) AND INSTR(1,B1$,A1$) THEN MQ=1 2050 IF ML=0 THEN 2100 2060 IF A1$=CHR$(34) THEN Q1=Q1*-1 2070 IF Q1<0 THEN 2100 2090 IF A1$=":" THEN GOSUB 3000 2095 IF A1$>CHR$(127) THEN GOSUB 4000 'Strip any high bits 2100 NEXT I 2110 GOSUB 3000 2120 RETURN 3000 ' This subroutine PRINTS a string up to MC characters in length 3005 F1$=MID$(B$,K1,I-K1) 3010 IF F1$="" THEN RETURN 3020 IF F=1 THEN K=(INSTR(1,B$,A2$)+1):IF OP=1 THEN LPRINT TAB(K); 3030 IF F=1 AND OL=1 THEN PRINT #2,TAB(K); 3040 IF OP=1 THEN LPRINT F1$ 3050 IF OL=1 THEN PRINT #2,F1$ 3055 IF F=1 THEN PRINT TAB(K); 3056 PRINT F1$ 3060 K1=I:F=1:LP=LP+1:CC=K:MQ=0 3070 IF LP>=LL THEN LP=0:N=N+1:IF OP=1 THEN LPRINT CHR$(12) 3080 IF OL=1 AND LP=0 THEN PRINT #2,CHR$(12) 3090 IF LP=0 THEN GOSUB 1000 3100 RETURN 4000 N1=ASC(A1$):N1=N1-128:MID$(B$,I,1)=CHR$(N1):RETURN =0 THEN PRINT #2,CHR$(12) 3090 IF LP=0 THEN GOSUB 1000 3100 RETURN 4000 N1=ASC(A1$):N1=N1-128:MID$(B0 2030 CC=CC+1:A1$=MID$(B$,I,1):IF CC=MC THEN GOSUB 3000 2046 IF CC>=(MC-8) AND INSTR(1,B1$,A1$) THEN MQ=1 2050 IF ML=0 THEN 2100 2060 IF A1$=CHR$(34) THEN Q1=Q1*-1 2070 IF Q1<0 THEN 2100 2090 IF A1$=":" THEN GOSUB 3000 2095 IF A1$>CHR$(127) THEN GOÁk+ +yk+ (w!~#fo#~#w:j+,+6~+;+~ ;+6 H+~H+6ͤ/P+!{CwP P !5Ͱ!#P P Ͱ!2#!!vP Ͱ!2#!!FP Ͱ!2#!!P Ͱ!2#!!P Ͱ!2#!!P Ͱ!2#!!P Ͱ!2#!!VP Ͱ!2#!!&P Ͱ!2#!!P Ͱ!2#!!P Ͱ!2#!!P Ͱ!2#!!P Ͱ!2#!!vP Ͱ!P  !͑"P ͟# !qK!j!n͢!+!j͑"P !,"!j̓!!,"!f̓!|g}o|e͟# ô!,"!b̓!!,"!^̓!|g}o|ʜ͟# ôͰ!M!!,P ! K!jP ! K!j!͆ ͕#ͺ#P U!͟#P !#:P P ! K!j!͆ ͕#ͺ#!P U!!1͟#!P !@ K!%j%!= ͢!U%!j͑"P %!,"!j̓!%!,"!f̓!|g}o|ʏ͟#(%!,"!b̓!%!,"!^̓!|g}o|͟#(Ͱ!M!,! 1P ! K!/jP ͟#2P ! K!6j6! ͢!6!b͑"P 6!,"!j̓!6!,"!f̓!|g}o|‘6!,"!b̓!6!,"!^̓!|g}o|½Ͱ! !6!t P ͟#2!> K!9jP !: W:9!:P ͟#<͟#@P !6 W:/!:P !\!DjP !D9 |7Ͱ!#Ͱ!#Ͱ! Ͱ!!5ðP !5P !6 W:/!:!o5|˜P G! ͑"J!͑"P Ͱ!#͖%P !o5|´P !\!DjP ͖P ÉP Ͱ!#! P ͖ P +! ! #P +!2!H! #P !5P Ͱ!#ØP P P Ͱ!!*2#!!/! !@ͰO!="P Ͱ !O,"ͰO!="P +!2!H!ͨ!*2#!!/! !@P +! !!*2#!!/! !@P ͖ P ͟#<ͩP P ͟#M͟#Q͟#U͟#YP !D/ #ͺ#]Ͳ# P +!aL͖. P ͼ!Yͺ#Y!e#D!^"i͑"+!Y͖. P ͼ! YG!i|g}o|ʮ͟#aP Z!( P !"#!i͢!g$Uͺ#UP A!U P i! ͢!͖. P !#!i͝! ͖ P ͼ!eͺ#e!!e];P ͖. P ͩP P !M#!eM$D^"l͑"P l! ͢!c ͩP +!Q D!J"#ͺ#o+!  !o#2#!P Q 2|g}o| !H!o#2#!P +!  !lP +!2 !H!lP +!Q Ͱ!o#2#!P Ͱ!lP ͟#Me͟#Qͼ!<ͺ#<͟#Yo͟#aP !<! ͟#<ͼ!@ͺ#@+!  ͖ +!  ! #P 2!<|g}o| !H! #P U!< ͖%P ͩP !i9 #ͺ#sͼ!sͺ#s!s##!e#DNͩP +! 1 !#!="P +!2S !H!#!="P +!  !# ,"!="P +!2 !H!# ,"!H!="P ͩ  : Page Page # END of File );=F SORRY, THE FILE YOU SPECIFIED IS NOT IN ASCII FORMAT (IT IS TOKENIZED)9 I= O3A Please enter filename for disk storage of listing w was invalid. Please re-enter. Your entry of 8 Output listing to Disk File (Y)es or (N)o {DEFAULT=N} 4 Please enter the filename of program to be printed  was invalid. Please re-enter.@ GC Multistatement lines one statement per line (Y)es or (N)o {DEFAULT=Y} 6 Please enter number of lines per page (Default is 55) 6 Maximum number of characters per line (Default is 80) - Please enter Date and Time (MM/DD/YY HH:MM) / was invalid. Please re-enterPYour input of aneNiymYq6tOutput listing to printer (Y)es or (N)o {DEFAULT=Y} 123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789 -| message on all copies. Thanks. |-| copied. Please leave this sign-on |-| PUBLIC DOMAIN SOFTWARE. May be freely |-)| (C) 1985 Easley, SC 29640 |-Y| 102 Evergreen Street |-| PROGRAM BY: Thomas S. Cox |-| |-| (ASCII FORMAT)  October 31, 1985 |-| BASIC PROGRAM LISTER Version 2.02 |-I| BASLIST.BAS |-y---------------------------------------------\ Zdnortv(x@zX|p~+ 1U",-.70@1`3u6%@|Jhr  (a";. L 4 */  >( H1 R c  , W    1 S   [[[[ BASLIB #980007 5.1 - OWNED BY MICROSOFT, 1979 <ÅÅDM*"$*(##"$K>22*^#V"##^#V"!E"B6#6P>2I>2H>2G͂_RINT #2,STRING$(MC,61) 5010 IF OP=1 THEN LPRINT LEFT$(DUMMY$,MC):LP!9"**c!6#}c|c6!6#zv*|ʗ> 6#s#r#=Œ>2 >2 >2 2"!"͞'!( STOͯ8*.. . .........ͼ&**|:'<*%|<;* s#r* {w#6"(**%>2'8!(Error -!i~Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erro!9N#F*~#~l~+r~#~l+^#V###J###J|~~#fo!!( Internal Error - No Line Number *~#!( at line;8><<0>}_|W!#?~#fo>!( at address|#}#8> >> >!9"*|B}ͬ:<x;`i"!"2!"4 ,͂*ͦ(*8@*6@*4@*2@)*6@͏(*8@*6@ ,Z~#x͡&L!>͒&͡&͔"͢7 +"@G{,x@PX͢7ڎ!Oz"yy ʮ yO{,y͢7ڎ y{ ʈ,> ʈʈʎʎ͢7E"ʙ ͢7 ʙ, ¹͢7 *% 46!ɷw#C#"@_*@+~ #(C#"@+~7ȷ> ͨC> èC;!";!2:::D:!":!:: :9D~9D[DN#"!9""y2*|*2!"*A~#*?~ʏ({*+͂*"Q]ͦ(*8@*6@*4@*2@j)*6@j͏(*8@*6@*?ʂ~#",~!"*~,"š#"~ʮʮ# "´#"x" +~ ʾy͡&j!(?Redo from Start *ͼ&!K*:O*+~+/!! +w #:++~#fo͔""!5*_~2J#~#^#V(++Ͳ&*<ڸB*|‰!͒&͡&͔"*4BBBBBBBBaBêBêBêBaê6@ 2@"6@#H~# x2Z(:=͡PL,͒&<~L=#@L,~L =#S>2Z(:=F#~#fox͘͡ʏ~#=Ã͘ò&͡>"=G:Ax͡'>*B+~<=###~*8'>!L*>*B~=/<=:=> =͡>,=W*B#^ 4.+=.'>z{F{_8B|‚}ͬ:a;`i"++"B!"8!"62=L_6ͩ4}o|gҪ> =+|Ÿ'>!E"B!"2=!H"B!"2=!@~6#w~!NLi& G~#!#++,0:7>|}!Iw )|T+ [_{"J"L~n_*J o gC#~#fox(?Ͳ&*L*J!4!9"^#V#!~w!9"Ʉxű y<2F~  #~#foy#?O #~#fox  # !4 2Ͳ&Ͳ&*&~Ͳ&o&~#^#V++Ͳ&o&ʸ:,>[>;>]>>2,ɯ2,B~<>&~#~#fo(?6+͒1͂*ͦ(Ͳ&ò&>!>!>!>!>!>^#V#^#V#c>>!>!>!>!>!>^#V#!6@c>>!>!>!>!>!>^#V#!Sc>>2!>2!>2!>2!>2!>^#V#^#V#?>>\!>\!>\!>\!>\!>^#V#!S?>>Å!>Å!>Å!>Å!>Å!>͆$!+>é!>é!>é!>é!>é!>͆$ʸ!~#fo##>^#V#B-F!^#ͼ>!>^#V#B͏F!^#ͼ>"^#V#>!~#o|$/|BBKf"PY|BBK W" o_:"zBzn" t"_z"o _ W}͡&Ͳ&DMB{&"~##++2'>(?+V+^+"+r+s|'B͔"~#^#Vá&B "~#~#fon&Ͳ&Bz#}>&~#s# #L|B!9>͡&+#*B{{U#=> =F#|}*BU#>^#V#6@>HB>$!6@>À$B>$!6@>B$!X-FͦGÐD^#V#B?$B?$BzY$|Y$|.HUH^#V'$>:8@28@:8@28@|GNʲ$yʲ$#~#fo~#fo»$#ʱ$ ¡$ yʻ$y<.$)$)Ͳ&Ͳ&)$$$$$|$G$O$$|$G$$%%%_!$4%5*$"$~#N#F#Z%4% #?%yx?% %+++6@#yw#xw+++6###!$~6k%̀%%%*$#~#~%L!*$"$~#^#V#%%#?Í%|²%Í%++~_w#~Ww#Í%̀%*$DM~#^#V#$&%%+z&+{&##{z~#q#p_%y&x&DM%~#&%YP+++"$6@###{_zW+r+sɷn&*$|Q&L^#V+"$ %#s#r+++r+s##!u&z&* ({z*(?Ґ&}|~# –&yG>&x(?{&2'|'* (*(6?&͵'&2'|'###&'!( during G.C. '!( !( Internal Error - String Space Corrup#N#F*$yxw'*$yxw'++`i+V+^6?&##6+6+~6  >@++*$"$s#r+%*$#~_#~Wҥ'Lr+s##6"$###!$~#fo'6?¹'<*$"$*$}o|g6@#s#r#6"$*(* ("$}w>#w##6?'++6+6$ %3J~>#=('(~>#'(R>͂P:<=_P!P!"PxQ!5Qͬ1(*6@}/o|/g#"6@|ͳ(HÂ(!8@~wɯ29@ͬ1(^Dͳ(*6@ͳ(Hͬ1(>D>>X*~#ø(Q(!<@(>!<@2@2(# (!<@øB!<@ͽ)P@>>(>|}+!s*Aͅ)zH+6!8@>D21@!o*âF!k*A!<@A~_#~W#~OI0F!01-FGX)ɇ<o&ͳ(H*6@*8@͈)"6@`i"8@!6@^#V#N#F#!o*.GͲIx{ҧI!:@6͇Hwg>JI):Z(Gw#)))!<@)6@ͬ12@ͬ1)*6@||<ͬ1*6@*)!,1)(͖(*J):8@28@:9@҉2͗):9@4*9*?*|/g}/oS*!2:9@\*͗)"6@>2Z(P)ajR* L}͊(Ͱ(t2>23(`hS*~&1-ʪ*+ʪ*+͒1ڍ+.7+eʼ*E*͒1l*L*q*Q*:Z(*>*~%D+#S+!T+d*D+[+͒1ͽ1͒1,+_{_j+z++a(ͬ1!_)\*ͬ1 +[+ê*#_))+[+#+̏(Ħ(ͬ1),)=ͬ1&) )DG,"2@`i"4@#~+q--H-0OxGq-#~/-`xEf-y ->25(v-|-^--"2@`i"4@z)#W/:5(-î--Ҳ-060̏)E0+~0-.ď)-ͬ1>"w#6+-6-/</ -:#p#w#6!7(#zt./0z/0{)=/ͅ,).p#6!6(#:[(~ ..*..+B.͒1-+$0l.#͒1l.++wb./.l.6%/ʐ.41(.L,+6%P).ʹ)/._x/ 0E0010._yx+.z+.{_x./ 0./y50O/GOE0/*[(=/P.͝(ѯ/ʹ)7/yx+OzWOz+>/L//< 10/>(n0>(p#=e0!2@w)á0J)>͗)z)1?10ͅ)/{_#zW#yO++ҵ08)#z)p#ڧ0>01>10N#F#*6@/}o|g0 "6@p#=010w1_cƤ~@zZrN vH Tʚ;@B''d #~: ʒ1 ʒ1 ʒ10?<=:Z(ҹ17-++͒1O2O1H1+11S*H#21LM!22}0?)))صo2M!+2)2}O20? A2? ))))صo+2a{ )ͬ1:9@:8@D):3(24(23(LLx7c*k5|ʩ2! s#r#w³222B:22"2222B:22"2222}ͬ:;! ^#V:23*2{<+s#r! w#w! ~#fo!;@3~3BK>!)S3)#T3))b3 a3#=I3}_}la)<y3#x<"2! "2!& "2!}o|g;ڨ3bk:23;ҽ3 4DM*2*2B4"2PY 4}o|g*2#"2‹3 4DM*2*2B4"2PY32;*2! ~#fo;s#r14:;>4!>4!# Û6~# xC4DMͫ4<͠4! w!% V6 x4zwͩ4<͠4! ~!Û4! ^#V! s#rDM͘4͒4;ڑ^66|’^>W_:{[d[:{[d[: {[d[:@{[d[*i#~d[{[d[c^c#~{[d[c;({[`{[d[c;({[{[d[ *id[{[*i##~d[{[*i##5d[{[*i#B}ͬ:<;!$ ~ʤ5#~™5`i`7À5>O #~goPY!$ ůw͑7<5ѯ<<p6!$ ~į5͑7D;B}ͬ:<!#?6! ~+ngB}ͬ:*T]" N#F+q#p###6 u7͑7=ʊ7>w+w!%+77?*$ 6#67~<#^#fk_7N#~:7++@ 88> 488Bͽ74H5< (?ͽ7:H5!85<H5< <85*i5~;#N#F++Ͳ& O8I8R;*k5|8!"k5}_ͬ:8D;{ͬ: (?66͑7~'9<<<9<<9<9!"w#w#w#w~X9]7& p# ^9͏: _Bͽ74H5<<B!H56# O:9Bͽ72T5!I5K:!Q5K:4H5<O!4  ~#L=y:~ :>.L= ::E W:F7:> L=L=I=H59~*6?# O:"i5>2 !y;"!:<2*"m5!:""k5B͏8*.|ʡ:##n5Ð:.5*m5<<<=_!.~#fo:##{:++ü:*.:".q#p#s#4#5++###DM !0~#fo";+V+^##*k5{z:BK^#V+"0! DM4;*k5 DM͋'s#r# 6# x7; !.T]~#foB|,;-: <*!!"#{>&f$%;!;*#;h|}!">6>4>?>=>:>7>5>2>3>@>C>Lo&!"!"@<:JQ\2H=k<P\L=2H=y=O=7 == = <Q<=O=Q<<Q L=>x<<>#<=6I=!a=Ó< ړ!=yq#L= “<> L=w=.= ʓ<Ö<:JI=w8>>^L=@L=I=~ p=> L=L=#a=*B ʖ=#~+<ʕ=='> => ڧ=4+~#<=== > :JG==:=<2*"}=!1>" >*6654> =~=>*B!E"B="B> => => > *}=J> G͂>^>~#fo`>##n> G͂>~>͌>>™>~+~?~¤>+#ұ>+ >&)))w^#V#!6@>>w#w#w#w#EQJ>2@>>6@> ~#=?!>#~ ? ?Ʌo$ɧGw#,?{zNETEQTSASPOSROWLPOTABSPCIN0PR0$ IPUUMFJSGFPEKPOKRSTFLDLEN_ Rр( ogzzpH{,q{ō(Yz$)zƀǔȕɔ(% 6#D@sDC@@IOʄ@!I!8@y#|@+o@I?IgA͛I>DÝ@gA5DJA!<@sD A:9@I:C@/DC21@:2@hCIx/F+N+=‡A!<@ÛA!2@>q#p#=žA!2@A"j?͒ÁAmA*j?sDʂI:9@ʂI!B@N#F͆GCqAG/C-Dx AAhC!8@ DAj0 TeB׳]h!I.k gA͛I>DDBgA5D!<@A!9@q#~++w+q_BIDNn"~`35zr1{r1h!IsDIyO2B@þBsDI:9@JAB/DCgA5D!<@øBgA͛I>DCgA5DJA!<@èBy2B@!8@q?~q+CqDNsY+ DD W~w+"DD!8@DH>D͛I!2@w#DDIUD}͊D^DÐD͊DzH!5@F#^#V#NbI͐D}<@~#xDG++NyI2@vD!6@͛I>DҥDIDͲI!:@6͇Hg>J|cH>ŸDak͛I(EͦG(EIͼI6EI>E͏HEͩG G|ͧIE!(E#E͏H͢E4GEE>O!9@~+>wIQYäIQHI:9@|EhtE͏HͦGƁ|EqH͕F!EFJ8GQYäIIIQI|Yt&wz^Pc|u~r1ͤIE>29@!EF͏HogH3F }}{(qnz ͏HͲI4GF4G͏H~#͛I=x1GͼI3F F H0FͼII:9@ʤICF/O3F HåFͼIQHIȯG͆G"@y2!@FohHqH!D*6@:8@OF9@4QIF Gg.*@:!@OzF Gg.*6@:8@Fx<=!G{_zWxG)yOHGbI H1GͼIʧII͆Gy+F+F+Fw`h|~GgybG:6@O|g}oxG-|VG}QGäHElaOPG!9@~GxGƀʁIwzHw+ɷQIÂIͲIx{ҧI!:@6͇HwgGzG >J|tI{>29@ͤH/I I7>{_zW}o|g=I|g}oJCZQJ o-yOzW{_xG!J6@*8@DM^#V#N#F#xyI:9@:8@7|/G}/O!>I I7>{_zW}o|~O]HäH HÒFͼII>O3F HåFͼIQHIȯG͆G"@y2!@FohHqH!D*6@:8@OF9@4QIF Gg.*@:!@OzF Gg.*6@:8@Fx<=!G{_zWxG)yOHGbI H1GͼIʧII͆Gy+F+F+Fw`h|~GgybG:6@O|g}oxG-|VG}QGäHElaOPG!9@~GxGƀʁIwzHw+ɷQIÂIͲIx{ҧI!:@6͇HwgGzG >J|tI{>29@ͤH/= MC-8 * * N1 = Used in high bit stripping routine * * ML = Used in determining appropriate break in line * *  * ******************************************************************** This program is placed in the public domain and may be used by individual users as they wish. The program is not to be used in Commercial products or sold for profit without the expressed written consent of the author. The author is Thomas S. Cox 102 Evergreen Street Easley, SC 29640 (803) 855-4355 The author welcomes any comments and/or suggestions. ******************************************************************** * * * This program is known to execute properly under OBASIC, * * MBASIC, and BASICA. The CP/M version (OBASIC and MBASIC) * * executes much faster when compiled using BASCOM. The * * IBM version also runs much faster when compiled. * * * * Execution speed with Interpreted BASIC is S L O W! * ******************************************************************** EXAMPL O BASLIST USE O ITSEL (Decembe 24 1985) December 24, 1985 Version 2.02 BASLIST B:BASLIST2.BAS Page # 1 ================================================================================ 123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789| ================================================================================ 20 CLEAR 5000 'Required only for OBASIC not MBASIC or BASICA 90 CLOSE :PRINT CHR$(26) 'Clear Screen Code for KAYPRO, May be machine dependent 100 ' For ZORBA use Print CHR$(27)+"E"; For IBM, use CLS 110 PRINT TAB(15);"---------------------------------------------" 111 PRINT TAB(15);"| BASLIST.BAS |" 114 PRINT TAB(15);"| BASIC PROGRAM LISTER Version 2.02 |" 116 PRINT TAB(15);"| (ASCII FORMAT) October 31, 1985 |" 118 PRINT TAB(15);"| |" 120 PRINT TAB(15);"| PROGRAM BY: Thomas S. Cox |" 122 PRINT TAB(15);"| 102 Evergreen Street |" 124 PRINT TAB(15);"| (C) 1985 Easley, SC 29640 |" 126 PRINT TAB(15);"| |" 128 PRINT TAB(15);"| PUBLIC DOMAIN SOFTWARE. May be freely |" 130 PRINT TAB(15);"| copied. Please leave this sign-on |" 132 PRINT TAB(15);"| message on all copies. Thanks. |" 136 PRINT TAB(15);"---------------------------------------------" 138 PRIN T" " 140 DUMMY$="123456789|123456789|123456789|123456789|123456789|123456789|1234567 89|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123 456789|123456789|123456789|123456789|123456789|123456789|123456789|12345678 9|123456789" 160 OP=0 :LINE INPUT"Output listing to printer (Y)es or (N)o {DEFAULT=Y} "; OP$ :IF OP$="" THEN OP$="Y" 170 IF LEFT$(OP$,1)="Y" OR LEFT$(OP$,1)="y" THEN OP=1 ELSE IF LEFT$(OP$,1) ="N" OR LEFT$(OP$,1)="n" THEN OP=0 ELSE PRINT"Your input of ";OP$;" was invalid. Please re-enter" :GOTO 160 180 LINE INPUT "Please enter Date and Time (MM/DD/YY HH:MM) ";TD$ 190 LINE INPUT"Maximum number of characters per line (Default is 80) ";MC$ :MC=VAL(MC$) 191 IF MC=0 THEN MC=80 192 WIDTH LPRINT MC 'USED ONLY FOR CP/M VERSIONS OF OBASIC AND MBASIC 194 ' FOR IBM BASICA THE PROPER FORMAT IS 'WIDTH "LPT1:",MC' 196 LINE INPUT "Please enter number of lines per page (Default is 55) "; LL$ :LL=VAL(LL$) 198 IF LL=0 THEN LL=55 200 LINE INPUT "Multistatement lines one statement per line (Y)es or (N) o {DEFAULT=Y} ";MS$ :IF MS$="" THEN MS$="Y" 210 IF LEFT$(MS$,1)="Y" OR LEFT$(MS$,1)="y" THEN ML=1 ELSE IF LEFT$(MS$,1) ="N" OR LEFT$(MS$,1)="n" THEN ML=0 ELSE PRINT"Your input of ";ML$;" was invalid. Please re-enter." :GOTO 200 220 LINE INPUT "Please enter the filename of program to be printed ";F$ 230 OL=0 240 LINE INPUT "Output listing to Disk File (Y)es or (N)o {DEFAULT=N} ";OL$ :IF OL$="" THEN OL$="N" 250 IF LEFT$(OL$,1)="Y" OR LEFT$(OL$,1)="y" THEN GOTO 260 ELSE IF LEFT$(OL$,1) December 24, 1985 Version 2.02 BASLIST B:BASLIST2.BAS Page # 2 ================================================================================ 123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789| ================================================================================ ="N" OR LEFT$(OL$,1)="n"THEN GOTO 290 ELSE PRINT"Your entry of ";OL$; "was invalid. Please re-enter." :GOTO 230 260 OL=1 :LINE INPUT"Please enter filename for disk storage of listing ";FS$ 270 OPEN "O",2,FS$ 290 LP=0 :N=1 300 OPEN "I",1,F$ 301 LINE INPUT #1,B$ 302 IF ASC(B$)=255 THEN PRINT CHR$(26) :PRINT CHR$(7) :PRINT"SORRY, THE FILE YOU SPECIFIED IS NOT IN ASCII FORMAT (IT IS TOKENIZE D)" :PRINT " " :CLOSE 1 :GOTO 110 304 CLOSE 1 305 OPEN "I",1,F$ :IF EOF(1) THEN GOTO 90 307 B1$=" );=" :A2$=" " 310 PRINT CHR$(26) :GOSUB 1000 'print title at start of first page 320 IF EOF(1) THEN GOTO 380 'if no more data then quit 330 LINE INPUT #1,B$ 'read file up through next CR/LF 360 GOSUB 2000 'Start extraction of MC Column lines 370 GOTO 320 380 PRINT CHR$(26);"END of File" 'When all has been done, eject page and STOP 385 GOSUB 5000 390 IF OP=1 THEN LPRINT CHR$(12) 'CHR$(12)=Form Feed 400 IF OL=1 THEN PRINT #2,CHR$(12) 410 CLOSE 'Any open file will be closed 415 PRINT CHR$(7) :GOTO 90 420 END 1000 ' This subroutine prints Titles, Page Numbers, etc. 1003 PRINT TD$;TAB(42);F$;" Page # ";N :PRINT STRING$(79,61) 1004 PRINT LEFT$(DUMMY$,79) :PRINT STRING$(79,61) 1005 IF OL=1 THEN PRINT #2,TD$,TAB(42);F$;" Page # ";N 1010 IF OP=1 THEN LPRINT TD$;TAB(42);F$;" Page ";N 1015 GOSUB 5000 1030 LP=2 :RETURN 2000 ' This subroutine extracts up to MC characters for a line 2010 K1=1 :F=0 :Q1=1 :CC=0 2020 FOR I=1 TO LEN(B$) December 24, 1985 Version 2.02 BASLIST B:BASLIST2.BAS Page # 3 ================================================================================ 123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789| ================================================================================ 2023 IF MQ=1 THEN GOSUB 3000 2030 CC=CC+1 :A1$=MID$(B$,I,1) :IF CC=MC THEN GOSUB 3000 2046 IF CC>=(MC-8) AND INSTR(1,B1$,A1$) THEN MQ=1 2050 IF ML=0 THEN 2100 2060 IF A1$=CHR$(34) THEN Q1=Q1*-1 2070 IF Q1<0 THEN 2100 2090 IF A1$=":" THEN GOSUB 3000 2095 IF A1$>CHR$(127) THEN GOSUB 4000 'Strip any high bits 2100 NEXT I 2110 GOSUB 3000 2120 RETURN 3000 ' This subroutine PRINTS a string up to MC characters in length 3005 F1$=MID$(B$,K1,I-K1) 3010 IF F1$="" THEN RETURN 3020 IF F=1 THEN K=(INSTR(1,B$,A2$)+1) :IF OP=1 THEN LPRINT TAB(K); 3030 IF F=1 AND OL=1 THEN PRINT #2,TAB(K); 3040 IF OP=1 THEN LPRINT F1$ 3050 IF OL=1 THEN PRINT #2,F1$ 3055 IF F=1 THEN PRINT TAB(K); 3056 PRINT F1$ 3060 K1=I :F=1 :LP=LP+1 :CC=K :MQ=0 3070 IF LP>=LL THEN LP=0 :N=N+1 :IF OP=1 THEN GOSUB 5000 :IF OP=1 THEN LPRINT CHR$(12) 3080 IF OL=1 AND LP=0 THEN PRINT #2,CHR$(12) 3090 IF LP=0 THEN GOSUB 1000 3100 RETURN 4000 N1=ASC(A1$) :N1=N1-128 :MID$(B$,I,1)=CHR$(N1) :RETURN 5000 IF OP=1 THEN LPRINT STRING$(MC,61) 5005 IF OL=1 THEN PRINT #2,STRING$(MC,61) 5010 IF OP=1 THEN LPRINT LEFT$(DUMMY$,MC) :LPRINT STRING$(MC,61) 5015 IF OL=1 THEN PRINT #2, LEFT$(DUMMY$,MC) :PRINT #2,STRING$(MC,61) 5020 RETURN ================================================================================ 123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789| ================================================================================ 23456789|123456789|123456789|123456789|123456789|123456789| ================================================================================ 2023 IF MQ=1 THEN GOSUB 3000 2030 CC=CC+1 :A1$=MID$(B$,I,1) :IF CC=MC THEN GOSUB 3000 2046 IF CC>=(MC-8) AND INSTR(1,B1$,A1$) THEN MQ=1 2050 IF ML=0 THEN 2100 2060 IF A1$=CHR$(34) THEN Q1=Q1*-1 2070 IF Q1<0 THEN 2100 2090 IF A1$=":" THEN GOSUB 3000 2095 IF A1$>CHR$(127) THEN GOSUB 4000 'Strip any high bits 2100 NEXT I 2110 GOSUB 3000 2120 RETURN 3000 ' This subroutine PRINTS a string up to MC characters in length 3005 F1$=MID$(B$,K1,I-K1) 3010 IF F1$="" THEN RETURN 3020 IF F=1 THEN K=(INSTR(1,B$,A2$)+1) :IF OP=1 THEN LPRINT TAB(K); 3030 IF F=1 AND OL=1 THEN PRINT #2,TAB(K); 3040 IF OP=1 THEN LPRINT F1$ 3050 IF OL=1 THEN PRINT #2,F1$ 3055 IF F=1 THEN PRINT TAB(K); 3056 PRINT F1$ 3060 K1=I :F=1 :LP=LP+1 :CC=K :MQ=0 3070 IF LP>=LL THEN LP=0 :N=N+1 :IF OP=1 THEN GOSUB 5000 :IF OP=1 THEN LPRINT CHR$(12) 3080 IF OL=1 AND LP=0 THEN PRINT #2,CHR$(12) 3090 IF LP=0 THEN GOSUB 1000 3100 RETURN 4000 N1=ASC(A1$) :N1=N1-128 :MID$(B$,I,1)=CHR$(N1) :RETURN 5000 IF OP=1 THEN LPRINT STRING$(MC,61) 5005 IF OL=1 THEN PRINT #2,STRING$(MC,61) 5010 IF OP=1 THEN LPRINT LEFT$(DUMMY$,MC) :LPRINT STRING$(MC,61) 5015 IF OL=1 THEN PRINT #2, LEFT$(DUMMY$,MC) :PRINT #2,STRING$(MC,61) 5020 RETURN ================================================================================ 123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789| ================================================================================  :MQ=0 3070 IF LP>=LL THEN LP=0 :N=N+1 :IF OP=1 THEN GOSUB 5000 :IF OP=1 THEN LPRINT CHR$(12) 3080 IF OL=1 AND LP=0 THEN PRINT #2,CHR$(12) 3090 IF LP=0 THEN GOSUB 1000 3100 RETURN 4000 N1=ASC(A1$) :N1=N1-128 :MID$(B$,I,1)=CHR$(N1) :RETURN 50020 CLEAR 5000 'Required only for OBASIC not MBASIC or BASICA 90 CLOSE:PRINT CHR$(26) 'Clear Screen Code for KAYPRO, May be machine dependent 100 ' For ZORBA use Print CHR$(27)+"E"; For IBM, use CLS 110 PRINT TAB(15);"---------------------------------------------" 111 PRINT TAB(15);"| BASLIST.BAS |" 114 PRINT TAB(15);"| BASIC PROGRAM LISTER Version 2.02 |" 116 PRINT TAB(15);"| (ASCII FORMAT) October 31, 1985 |" 118 PRINT TAB(15);"| |" 120 PRINT TAB(15);"| PROGRAM BY: Thomas S. Cox |" 122 PRINT TAB(15);"| 102 Evergreen Street |" 124 PRINT TAB(15);"| (C) 1985 Easley, SC 29640 |" 126 PRINT TAB(15);"| |" 128 PRINT TAB(15);"| PUBLIC DOMAIN SOFTWARE. May be freely |" 130 PRINT TAB(15);"| copied. Please leave this sign-on |" 132 PRINT TAB(15);"| message on all copies. Thanks. |" 136 PRINT TAB(15);"---------------------------------------------" 138 PRINT" " 140 DUMMY$="123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789" 160 OP=0:LINE INPUT"Output listing to printer (Y)es or (N)o {DEFAULT=Y} ";OP$:IF OP$="" THEN OP$="Y" 170 IF LEFT$(OP$,1)="Y" OR LEFT$(OP$,1)="y" THEN OP=1 ELSE IF LEFT$(OP$,1)="N" OR LEFT$(OP$,1)="n" THEN OP=0 ELSE PRINT"Your input of ";OP$;" was invalid. Please re-enter":GOTO 160 180 LINE INPUT "Please enter Date and Time (MM/DD/YY HH:MM) ";TD$ 190 LINE INPUT"Maximum number of characters per line (Default is 80) ";MC$:MC=VAL(MC$) 191 IF MC=0 THEN MC=80 192 WIDTH LPRINT MC 'USED ONLY FOR CP/M VERSIONS OF OBASIC AND MBASIC 194 ' FOR IBM BASICA THE PROPER FORMAT IS 'WIDTH "LPT1:",MC' 196 LINE INPUT "Please enter number of lines per page (Default is 55) ";LL$:LL=VAL(LL$) 198 IF LL=0 THEN LL=55 200 LINE INPUT "Multistatement lines one statement per line (Y)es or (N)o {DEFAULT=Y} ";MS$:IF MS$="" THEN MS$="Y" 210 IF LEFT$(MS$,1)="Y" OR LEFT$(MS$,1)="y" THEN ML=1 ELSE IF LEFT$(MS$,1)="N" OR LEFT$(MS$,1)="n" THEN ML=0 ELSE PRINT"Your input of ";ML$;" was invalid. Please re-enter.":GOTO 200 220 LINE INPUT "Please enter the filename of program to be printed ";F$ 230 OL=0 240 LINE INPUT "Output listing to Disk File (Y)es or (N)o {DEFAULT=N} ";OL$:IF OL$="" THEN OL$="N" 250 IF LEFT$(OL$,1)="Y" OR LEFT$(OL$,1)="y" THEN GOTO 260 ELSE IF LEFT$(OL$,1)="N" OR LEFT$(OL$,1)="n"THEN GOTO 290 ELSE PRINT"Your entry of ";OL$;"was invalid. Please re-enter.":GOTO 230 260 OL=1:LINE INPUT"Please enter filename for disk storage of listing ";FS$ 270 OPEN "O",2,FS$ 290 LP=0:N=1 300 OPEN "I",1,F$ 301 LINE INPUT #1,B$ 302 IF ASC(B$)=255 THEN PRINT CHR$(26):PRINT CHR$(7):PRINT"SORRY, THE FILE YOU SPECIFIED IS NOT IN ASCII FORMAT (IT IS TOKENIZED)":PRINT " ":CLOSE 1:GOTO 110 304 CLOSE 1 305 OPEN "I",1,F$:IF EOF(1) THEN GOTO 90 307 B1$=" );=":A2$=" " 310 PRINT CHR$(26):GOSUB 1000 'print title at start of first page 320 IF EOF(1) THEN GOTO 380 'if no more data then quit 330 LINE INPUT #1,B$ 'read file up through next CR/LF 360 GOSUB 2000 'Start extraction of MC Column lines 370 GOTO 320 380 PRINT CHR$(26);"END of File" 'When all has been done, eject page and STOP 385 GOSUB 5000 390 IF OP=1 THEN LPRINT CHR$(12) 'CHR$(12)=Form Feed 400 IF OL=1 THEN PRINT #2,CHR$(12) 410 CLOSE 'Any open file will be closed 415 PRINT CHR$(7):GOTO 90 420 END 1000 ' This subroutine prints Titles, Page Numbers, etc. 1003 PRINT TD$;TAB(42);F$;" Page # ";N:PRINT STRING$(79,61) 1004 PRINT LEFT$(DUMMY$,79):PRINT STRING$(79,61) 1005 IF OL=1 THEN PRINT #2,TD$,TAB(42);F$;" Page # ";N 1010 IF OP=1 THEN LPRINT TD$;TAB(42);F$;" Page ";N 1015 GOSUB 5000 1030 LP=2:RETURN 2000 ' This subroutine extracts up to MC characters for a line 2010 K1=1:F=0:Q1=1:CC=0 2020 FOR I=1 TO LEN(B$) 2023 IF MQ=1 THEN GOSUB 3000 2030 CC=CC+1:A1$=MID$(B$,I,1):IF CC=MC THEN GOSUB 3000 2046 IF CC>=(MC-8) AND INSTR(1,B1$,A1$) THEN MQ=1 2050 IF ML=0 THEN 2100 2060 IF A1$=CHR$(34) THEN Q1=Q1*-1 2070 IF Q1<0 THEN 2100 2090 IF A1$=":" THEN GOSUB 3000 2095 IF A1$>CHR$(127) THEN GOSUB 4000 'Strip any high bits 2100 NEXT I 2110 GOSUB 3000 2120 RETURN 3000 ' This subroutine PRINTS a string up to MC characters in length 3005 F1$=MID$(B$,K1,I-K1) 3010 IF F1$="" THEN RETURN 3020 IF F=1 THEN K=(INSTR(1,B$,A2$)+1):IF OP=1 THEN LPRINT TAB(K); 3030 IF F=1 AND OL=1 THEN PRINT #2,TAB(K); 3040 IF OP=1 THEN LPRINT F1$ 3050 IF OL=1 THEN PRINT #2,F1$ 3055 IF F=1 THEN PRINT TAB(K); 3056 PRINT F1$ 3060 K1=I:F=1:LP=LP+1:CC=K:MQ=0 3070 IF LP>=LL THEN LP=0:N=N+1:IF OP=1 THEN GOSUB 5000:IF OP=1 THEN LPRINT CHR$(12) 3080 IF OL=1 AND LP=0 THEN PRINT #2,CHR$(12) 3090 IF LP=0 THEN GOSUB 1000 3100 RETURN 4000 N1=ASC(A1$):N1=N1-128:MID$(B$,I,1)=CHR$(N1):RETURN 5000 IF OP=1 THEN LPRINT STRING$(MC,61) 5005 IF OL=1 THEN PRINT #2,STRING$(MC,61) 5010 IF OP=1 THEN LPRINT LEFT$(DUMMY$,MC):LPRINT STRING$(MC,61) 5015 IF OL=1 THEN PRINT #2, LEFT$(DUMMY$,MC):PRINT #2,STRING$(MC,61) 5020 RETURN INT LEFT$(DUMMY$,MC):LPRINT STRING$(MC,61) 5015 IF OL=1 THEN PRINT 3000 2095 IF A1$>CHR$(127) THEN GOSUB 4000 'Strip any high bits 2100 NEXT I 2110 GOSUB 3000 2120 RETURN 3000 ' This subroutine PRINTS a string up to MC characters in length 3005 F1$=MID$(B$,K1,I-K1) 3010 IF F1$="" THEN RETURN 3020 IF F=1 THEN K=(INSTR(1,B$,A2$)+1):IF OP=1 THEN LPRINT TAB(K); 3030 IF F=1 AND OL=1 THEN PRINT #2,TAB(K); 3040 IF OP=1 THEN LPRINT F1$ 3050 IF OL=1 THEN PRINT #2,F1$ 3055 IF F=1 THEN PRINT TAB(K); 3056 PRINT F1$ 3060 K1=I:F=1:LP=LP+1:CC=K:MQ=0 3070 IF LP>=LL THEN LP=0:N=N+1:IF OP=1 THEN GOSUB 5000:IF OP=1 THEN LPRINT CHR$(12) 3080 IF OL=1 AND LP=0 THEN PRINT #2,CHR$(12) 3090 IF LP=0 THEN GOSUB 1000 3100 RETURN 4000 N1=ASC(A1$):N1=N1-128:MID$(B$,I,1)=CHR$(N1):RETURN 5000 IF OP=1 THEN LPRINT STRING$(MC,61) 5005 CLOSE 10 REM 20 REM 30 REM 40 REM 50 REM 60 REM 70 REM 80 REM 90 REM 100 REM 110 CL$=CHR$(26):RE$=CHR$(13):BS$=CHR$(8):BU$=CHR$(19) 115 REM 120 EK$=CHR$(27):BE$=CHR$(7) 125 US$="_":BL$=" ":NU$="" 130 SC=1:PR=2:F1=3:F2=4 140 PS=66:TM=5:SW=70 145 REM 160 OU=SC 220 ON ERROR GOTO 41600 650 GOTO 2000 651 REM 660 REM 670 REM 675 REM 680 REM 690 EC$=NU$:T$=WW$ 691 FD$=BL$ 692 IF WR$<>"WRAP" THEN FOR N=1 TO LN:PRINT US$;:NEXT 693 IF WR$<>"WRAP" THEN FOR N=1 TO LN:PRINT BS$;:NEXT:FD$=US$ 695 PRINT WW$; 700 C=LEN(WW$):WW$=NU$ 705 C=C+1:C$=INPUT$(1) 706 IF C$=BU$ THEN C$=BS$ 725 IF C$=RE$ AND TI$="TIME" THEN PRINT BL$:PRINT:PRINT:TI$=NU$:GOTO 780 729 IF C$=EK$ THEN EC$="ESC": GOTO 780 730 IF C$=RE$ THEN PRINT :GOTO 780 735 IF ((ASC(C$)LC)) AND C$<>BS$ THEN C=C-1: GOTO 705 740 IF C$=BS$ AND C=1 THEN GOTO 700 743 PRINT C$; 745 IF C$=BS$ AND C=2 THEN T$=NU$:GOTO 700 758 IF C$=BS$ AND C>2 THEN C=C-2:T$=LEFT$(T$,C):GOTO 705 760 IF C=LN AND TI$="TIME" THEN PRINT:PRINT:PRINT:T$=T$+C$:TI$=NU$:GOTO 780 761 IF C=LN AND WR$<>"WRAP" THEN T$=T$+C$:GOTO 780 765 IF C>=LN AND C$=BL$ THEN PRINT :GOTO 780 770 IF C>LN AND C$<>BL$ THEN T$=T$+C$:GOSUB 790:GOTO 780 775 T$=T$+C$:GOTO 705 780 WR$=NU$ 785 RETURN 790 REM 795 REM 800 REM 805 REM 810 LN=LN+1 815 C=LN:WW$=NU$ 820 C=C-1:C$=MID$(T$,C,1) 822 PRINT BL$;BS$;BS$; 825 IF C$=BL$ THEN PRINT FD$;BS$:WW$=RIGHT$(T$,LN-C):T$=LEFT$(T$,C):GOTO 845 830 IF C>1 THEN GOTO 820 840 IF LEN(T$)>=LN THEN T$=LEFT$(T$,LN):PRINT 845 RETURN 850 REM 900 REM 910 REM 915 REM 920 UP$=NU$ 930 FOR N=1 TO LEN(LW$) 940 C$=MID$(LW$,N,1) 950 IF C$>"Z" THEN C$=CHR$(ASC(C$)-32) 960 UP$=UP$+C$ 970 NEXT 980 RETURN 2000 REM *** DECLARATIONS, continued from line 650 *** 2008 REM *** ARRAY DECLARATIONS *** 2009 OPTION BASE 1 2010 BS=50:FL=40 2040 DIM L$(BS), L2$(BS):REM text buffers 2045 DIM FT$(FL):REM file index table 2050 REM 2055 DIM C(28) 2060 DIM MS(12):REM month sizes 2065 DIM MN$(12) 2070 DIM DN$(7) 2075 DIM FV(3),LV(3),FE$(3) 2080 REM 2085 REM 2086 REM 2087 REM 2111 REM 2140 F$=NU$:OF=1:GOSUB 5600 2145 IF CH$="W" THEN GOSUB 2800:GOTO 2140 2150 IF CH$="F" THEN GOSUB 3850:GOTO 2140 2155 IF CH$="A" THEN GOSUB 27900:GOTO 2140 2160 IF CH$="C" OR CH$="I" THEN DE$="PROGRAM":GOSUB 41555 2165 IF CH$="C" THEN PRINT CL$:FOR N=1 TO 11:PRINT:NEXT:PRINT TAB(14);"Getting calculator...":CHAIN "CALC-DM.BAS" 2175 IF CH$="I" THEN CHAIN "DDISK-DM.BAS" 2180 IF CH$="Q" OR CH$=EK$ THEN GOTO 2200 2190 ME$="Choice not on the menu" 2195 GOTO 2140 2200 PRINT CL$:END 2750 REM 2800 REM 2950 PR$="memo":TY$=".MEM" 3150 OF=2: GOSUB 5600 3200 IF CH$="E" THEN NM$="NUMBER":GOSUB 6800:GOTO 3150 3250 IF CH$="C" THEN GOSUB 37450:GOTO 3150 3300 IF CH$="P" THEN GOSUB 11950:GOTO 3150 3350 IF CH$="S" THEN GOSUB 17500:GOTO 3150 3400 IF CH$="R" THEN GOSUB 19400:GOTO 3150 3450 IF CH$="L" THEN GOSUB 13850:GOSUB 16850:GOTO 3150 3500 IF CH$="D" THEN GOSUB 21150: GOTO 3150 3600 IF CH$="Q" OR CH$=EK$ THEN GOTO 3610 3605 ME$="Choice not on the menu" 3607 GOTO 3150 3610 IF T=0 THEN GOTO 3750 3620 PRINT CL$ 3623 PRINT "In case you haven't already, would you like" 3624 PRINT "to save your memo in a disk file before the" 3630 PRINT "buffer is erased? "; 3635 LW$=INPUT$(1):GOSUB 900:K$=UP$ 3640 IF K$<>"N" THEN CH$="S": GOTO 3350 3650 T=0:ME$="Buffer erased" 3750 RETURN 3799 REM 3800 REM 3850 REM 4000 TY$=".CDX" 4150 OF=3:GOSUB 5600 4190 PR$="file" 4200 IF CH$="C" THEN GOSUB 22200:GOTO 4150 4250 PR$="card" 4300 IF CH$="A" THEN GOSUB 40250:GOTO 4150 4350 IF CH$="F" THEN GOSUB 4800:GOTO 4150 4400 PR$="file" 4450 IF CH$="D" THEN GOSUB 21150:GOTO 4150 4500 IF CH$="L" THEN GOSUB 13850:GOSUB 16850:GOTO 4150 4550 IF CH$="Q" OR CH$=EK$ THEN GOTO 4700 4600 ME$="Choice not on the menu" 4650 GOTO 4150 4700 RETURN 4750 REM 4799 REM 4800 REM 5000 OP$=NU$ 5150 OF=4:GOSUB 5600 REM MENU GENERATOR 5200 IF CH$="D" THEN OP$="DISPLAY" 5250 IF CH$="E" THEN OP$="DELETE" 5300 IF CH$="P" THEN OP$="PRINT" 5350 IF CH$="D" OR CH$="E" OR CH$="P" THEN GOSUB 24650:GOTO 5150 5400 IF CH$="Q" OR CH$=EK$ THEN GOTO 5500 5450 ME$="Choice not on menu":GOTO 5150 5500 RETURN 5549 REM 5550 REM 5600 REM 5650 REM IMPORT: ME$,DATA 5750 REM EXPORT: CH$,EC$ 5800 REM 5900 PRINT CL$ 5950 IF ME$<>NU$ THEN PRINT "*** ";ME$;" ***" 6000 IF ME$<>NU$ THEN PRINT 6050 ME$=NU$ 6100 RESTORE 6150 PRINT:PRINT 6200 N=0 6250 N=N+1 6300 READ OM 6350 FOR O=1 TO OM 6400 READ O$ 6450 IF N=OF THEN PRINT SPC(14);O$:PRINT 6500 NEXT 6550 IF N<>OF THEN GOTO 6250 6600 PRINT:PRINT "Select one of the above: "; 6650 LW$=INPUT$(1):GOSUB 900:CH$=UP$ 6700 RETURN 6750 REM 6751 REM 6800 REM 6900 REM 6950 REM 7000 REM 7010 IF T=0 OR TY$<>".MEM" THEN GOTO 7050 7020 PRINT:PRINT:PRINT "Okay to erase memo currently in buffer? "; 7025 LW$=INPUT$(1):GOSUB 900:K$=UP$ 7030 IF K$<>"Y" THEN ME$="Canceled":GOTO 7950 7050 EC$=NU$:WW$=NU$ 7150 PRINT CL$ 7200 PRINT "Enter your ";PR$;":":PRINT 7250 PRINT "Hit the ESC key when you are finished.":PRINT 7300 LN=SW 7350 IF TI$="TIME" THEN PRINT "Enter a valid such as like 7:30 AM,":PRINT "Time (HH:MM AM/PM): "; 7400 L=0 7450 L=L+1:REM for each input line 7500 IF NM$="NUMBER" THEN GOSUB 10000 7550 WR$="WRAP":LN=SW 7560 IF TI$="TIME" THEN WR$=NU$:LN=8 7600 FC=32:LC=127:GOSUB 660 7650 L$(L)=T$ 7700 IF EC$="ESC" THEN GOTO 7850 7750 IF L9 THEN MA$=STR$(L)+BL$ 10150 PRINT MA$; 10200 RETURN 10225 REM 10250 REM 10300 REM 10450 PRINT "Line to change "; 10500 EC$=NU$ 10600 GD$="NN":FV(1)=1:LV(1)=T:GOSUB 26500 10650 IF EC$="ESC" THEN GOTO 11150 10700 L=VAL(FE$(1)) 10750 IF L<1 OR L>T THEN PRINT "No line with that number!":GOTO 10300 10800 PRINT:PRINT:PRINT:PRINT 10950 PRINT:PRINT "Hit (ESC) or (RETURN) when finished:":PRINT 11000 GOSUB 10000:REM NUMBER MARGIN 11050 LN=SW:FC=32:LC=127:GOSUB 660:L$(L)=T$ 11150 RETURN 11151 REM 11152 REM 11250 REM 11300 REM IMPORT: L$(),T,OU 11400 REM EXPORT: ME$ 11500 MA$=NU$ 11550 IF OU=F1 OR OU=F2 THEN PRINT #OU,T 11575 IF ME$<>NU$ THEN GOTO 11850 11600 FOR L=1 TO T 11650 IF NM$="NUMBER" THEN GOSUB 10000 11700 IF OU=F1 OR OU=F2 THEN PRINT #OU,L$(L) 11705 IF ME$<>NU$ THEN GOTO 11850 11710 IF OU=SC THEN PRINT L$(L) 11720 IF OU=PR THEN LPRINT L$(L) 11730 IF (INT(L/20)=L/20) AND OU=SC THEN GOSUB 16850:PRINT:PRINT 11750 NEXT 11800 OU=SC:NM$=NU$ 11850 RETURN 11900 REM 11901 REM 11950 REM 12000 REM 12100 PRINT CL$ 12200 IF T=0 THEN ME$="Nothing to print":GOTO 12500 12225 FOR N=1 TO 11:PRINT:NEXT 12250 PRINT SPC(13);"Make sure the printer is on...":PRINT:PRINT:PRINT 12260 IF TY$=".MEM" THEN FOR N=1 TO TM:LPRINT:NEXT 12300 OU=PR:GOSUB 11250:REM PUT TEXT 12400 IF TY$=".MEM" THEN FOR N=1 TO PS-T-TM:LPRINT:NEXT 12500 RETURN 12550 REM 12551 REM 12600 REM 12650 REM 12700 REM 12800 DE$="DATA":GOSUB 41555 12850 OPEN "O",#F1,FI$ 12950 FOR F=1 TO FL 13000 PRINT #F1,FT$(F) 13050 NEXT 13100 CLOSE #F1 13150 RETURN 13200 REM 13201 REM 13250 REM 13350 REM 13400 REM 13500 REM 13550 IF EX<>0 THEN GOTO 13750 13600 FT$(L3)=F$ 13605 IF L3<>FL THEN FT$(L3+1)="0L" 13650 L3=L3+1 13700 GOSUB 12600 13750 RETURN 13800 REM 13801 REM 13850 REM 13900 REM 13950 REM 14050 REM 14100 EC$=NU$ 14200 IF TY$=".MEM" THEN FI$="MEMINDEX" 14250 IF TY$=".CDX" THEN FI$="CDXINDEX" 14300 IF TY$=".APT" THEN FI$="APTINDEX" 14350 DE$="DATA":GOSUB 41555 14400 IF TY$<>".APT" THEN PRINT CL$;PR$;"s on disk:" 14450 PRINT:PRINT 14500 OPEN "I",#F1,FI$ 14600 L3=FL+1 14650 FOR F=1 TO FL 14700 LINE INPUT #F1,FT$(F) 14750 IF FT$(F)<>"0N" AND FT$(F)<>"0L" AND TY$<>".APT" THEN PRINT FT$(F) 14800 IF FT$(F)="0L" THEN L3=F 14850 NEXT 14900 IF L3=1 AND TY$<>".APT" THEN PRINT "No ";PR$;"s";" yet.":PRINT:PRINT 14950 CLOSE #F1 15050 RETURN 15100 REM 15101 REM 15150 REM 15200 REM 15250 REM 15300 REM 15400 EX=0: REM Default 0 for non-existence of file 15450 FOR F=1 TO L3-1 15500 IF F$=FT$(F) THEN EX=F 15550 NEXT 15575 RETURN 15600 REM 15700 REM 15750 REM 15800 REM 15900 REM 15950 EC$=NU$:ME$=NU$ 16000 GOSUB 13850 16010 IF ME$<>NU$ THEN GOTO 16750 16050 IF F$<>NU$ THEN PRINT:PRINT:PRINT "Do you want the ";F$;" ";PR$;"? ";: LW$=INPUT$(1):GOSUB 900:K$=UP$:PRINT:PRINT 16100 IF K$=EK$ THEN EC$="ESC":GOTO 16750 16150 IF K$<>"N" AND F$<>NU$ THEN GOTO 16500 16200 PRINT:PRINT:PRINT "Enter a ";PR$;" name: "; 16250 WR$=NU$ 16300 LN=8:FC=32:LC=127:GOSUB 660 16350 IF EC$="ESC" OR T$=NU$ THEN EC$="ESC":GOTO 16750 16400 LW$=T$:GOSUB 900:F$=UP$:C$=LEFT$(F$,1) 16450 IF C$<"A" OR C$>"Z" THEN PRINT "(First character must be a letter).":PRINT BE$;"Please try again...";:GOTO 16200 16500 GOSUB 15150: REM FILE EXISTS 16550 PRINT:PRINT:PRINT 16600 IF (CF$="SHOULD BE" OR CF$="NO MATTER") AND EX=0 THEN ME$="No such file" 16650 IF (CF$="SHOULDN'T BE" OR CF$="NO MATTER") AND EX>0 THEN PRINT TAB(18);:PRINT "Overwrite ";F$;"? ";:LW$=INPUT$(1):GOSUB 900:K$=UP$:IF K$<>"Y" THEN ME$="Canceled" 16750 RETURN 16800 REM 16801 REM 16850 REM 16950 PRINT:PRINT:PRINT 17000 PRINT "Hit any key to continue..."; 17050 K$=INPUT$(1) 17100 RETURN 17150 REM 17151 REM 17200 REM 17250 PRINT CL$ 17300 FOR N=1 TO 11:PRINT:NEXT 17350 PRINT SPC(15);"Please wait" 17400 RETURN 17450 REM 17451 REM 17500 REM 17600 EC$=NU$ 17700 IF T=0 THEN ME$="Nothing to save": GOTO 18400 17750 CF$="SHOULDN'T BE":GOSUB 15700 17775 IF L3-1=FL AND EX=0 THEN ME$="No more "+PR$+"s allowed":GOTO 22950 17800 IF EC$="ESC" THEN ME$="Canceled": GOTO 18400 17850 IF ME$<>NU$ THEN GOTO 18400 17900 GOSUB 17200 17950 PRINT:PRINT SPC(18);"Writing" 17975 DE$="DATA":GOSUB 41555 18000 OPEN "O",#F1,F$+TY$ 18050 IF ME$<>NU$ THEN CLOSE #F1:GOTO 18400 18100 OU=F1:GOSUB 11250 18150 CLOSE #F1 18200 IF ME$<>NU$ THEN GOTO 18400 18250 ME$="Saved as: "+F$ 18300 GOSUB 13250 18400 RETURN 18450 REM 18451 REM 18500 REM 18550 REM 18600 REM 18700 ED$=NU$ 18850 IF EOF(OU) THEN ED$="EOF":GOTO 19100 18900 INPUT #OU,T 18950 FOR L=1 TO T 19000 LINE INPUT #OU,L$(L) 19050 NEXT 19100 OU=SC 19300 RETURN 19350 REM 19351 REM 19400 REM 19500 EC$=NU$ 19600 CF$="SHOULD BE":GOSUB 15700 19650 IF EC$="ESC" THEN ME$="Canceled":GOTO 20200 19750 GOSUB 17200:REM WAIT MESSAGE 19800 PRINT:PRINT SPC(18);"Reading" 19825 DE$="DATA":GOSUB 41555 19850 OPEN "I",#F1,F$+TY$ 19950 OU=F1:GOSUB 18500 20000 CLOSE #F1 20100 ME$=F$+" retreived" 20200 RETURN 20250 REM 20251 REM 20300 REM 20400 REM 20500 REM 20550 EC$=NU$ 20650 IF EX=FL THEN FT$(FL)="0L": GOTO 20950 20700 FOR F=EX TO FL-1 20750 FT$(F)=FT$(F+1) 20800 NEXT 20850 IF FT$(FL-1)="0L" OR FT$(FL-1)="0N" THEN FT$(FL)="0N" 20900 IF FT$(FL-1)<>"0L" AND FT$(FL-1) <> "0N" THEN FT$(FL)="0L" 20950 L3=L3-1 21000 GOSUB 12600 21050 RETURN 21100 REM 21101 REM 21150 REM 21250 EC$=NU$ 21300 CF$="NO MATTER" 21350 IF TY$=".APT" THEN GOTO 21650 21400 GOSUB 15700 21450 IF EC$="ESC" THEN ME$="Canceled": GOTO 22150 21500 IF ME$<>NU$ THEN GOTO 22150 21550 GOSUB 17200 21600 PRINT : PRINT SPC(17);"Deleting" 21625 DE$="DATA":GOSUB 41555 21650 KILL F$+TY$ 21700 GOSUB 20300 21725 IF ME$<>NU$ THEN GOTO 22150 21750 PRINT CL$:FOR N=1 TO 9:PRINT:NEXT 21800 IF TY$=".APT" THEN GOTO 22150 21850 PRINT PR$;": ";F$;" deleted.":PRINT:PRINT 21950 PRINT "Delete another? ";:LW$=INPUT$(1):GOSUB 900:K$=UP$ 22000 IF K$="Y" THEN GOTO 21350 22050 IF K$=EK$ THEN ME$="Canceled" 22150 RETURN 22155 REM 22160 REM 22200 REM 22250 REM 22300 REM 22450 EC$=NU$ 22550 CF$="SHOULDN'T BE":GOSUB 15700 22575 IF L3-1=FL AND EX=0 THEN ME$="No more "+PR$+"s allowed":GOTO 22950 22600 IF EC$="ESC" THEN ME$="Canceled":GOTO 22950 22650 DE$="DATA":GOSUB 41555 22750 OPEN "O",#F1,F$+TY$:CLOSE #F1 22800 IF ME$<>NU$ THEN GOTO 22950 22900 GOSUB 13250 22905 IF ME$<>NU$ THEN GOTO 22950 22910 ME$="Created "+F$ 22920 IF EX<>0 THEN ME$="Cleared "+F$ 22950 RETURN 23000 REM 23001 REM 23050 REM 23100 REM 23150 REM 23155 ED$=NU$ 23160 FOR L=1 TO T:L2$(L)=L$(L):NEXT:T2=T 23200 DE$="DATA":GOSUB 41555 23250 OPEN "O",#F2,"TEMP" 23300 OPEN "I",#F1,F$+TY$ 23350 OU=F1:GOSUB 18500 23400 IF ED$="EOF" THEN GOTO 23500 23450 OU=F2:GOSUB 11250:GOTO 23350 23475 IF ME$<>NU$ THEN CLOSE :GOTO 23651 23500 FOR L=1 TO T2:L$(L)=L2$(L):NEXT:T=T2 23550 OU=F2:GOSUB 11250 23600 CLOSE #F1,#F2 23605 IF ME$<>NU$ THEN GOTO 23651 23610 KILL F$+TY$:NAME "TEMP" AS F$+TY$ 23650 ME$="Appended to "+F$+" file" 23651 RETURN 23700 REM 23701 REM 23750 REM 23800 REM 23850 REM 24100 GI$=NU$ 24150 IF KE$="*" THEN GI$="GOT IT":GOTO 24550 24200 IF FU$="ORDER" AND K2$>KE$ THEN GI$="GOT IT":GOTO 24550 24250 IF FU$="ORDER" AND K2$<=KE$ THEN GOTO 24550 24300 L=0 24350 L=L+1 24400 IF L$(L)=KE$ THEN GI$="GOT IT":GOTO 24550 24450 IF L".APT" THEN GOSUB 15700 25000 IF TY$=".APT" THEN GOTO 25150 25100 IF EC$="ESC" THEN ME$="Canceled":GOTO 26400 25150 IF ME$<>NU$ THEN GOTO 26400 25175 DE$="DATA":GOSUB 41555 25200 OPEN "I",#F1,F$+TY$ 25250 IF OP$="DELETE" THEN OPEN "O",#F2,"TEMP" 25275 IF ME$<>NU$ THEN CLOSE:GOTO 26400 25300 IF TY$=".APT" THEN GOTO 25700 25350 PRINT CL$:FOR N=1 TO 7:PRINT:NEXT 25400 PRINT "Enter a key line to search for, below: " 25425 PRINT "(To match all cards, just type an '*')":PRINT 25450 LN=SW:FC=32:LC=127:GOSUB 660 25500 IF EC$="ESC" THEN ME$="Canceled":GOTO 26400 25550 KE$=T$ 25700 OU=F1:GOSUB 18500 25750 IF ED$="EOF" THEN GOTO 26150 25800 GOSUB 23750: REM MATCH 25850 IF GI$<>"GOT IT" AND OP$="DELETE" THEN OU=F2:GOSUB 11250:GOTO 25700 25875 IF ME$<>NU$ THEN CLOSE:GOTO 26400 25900 IF GI$<>"GOT IT" THEN GOTO 25700 25950 FO$="FOUND" 26000 IF OP$="DISPLAY" THEN PRINT:GOSUB 11250:PRINT 26050 IF OP$="PRINT" THEN LPRINT:GOSUB 11950:LPRINT 26100 GOTO 25700: REM END WITH EOF(F1) 26150 IF FO$="NOT FOUND" THEN ME$="Not found" 26200 IF FO$="FOUND" AND TY$<>".APT" AND OP$="DISPLAY" THEN GOSUB 16850 26250 CLOSE #F1 26275 IF OP$="DELETE" THEN CLOSE #F2 26300 IF OP$="DELETE" THEN KILL F$+TY$:NAME "TEMP" AS F$+TY$ 26350 IF TY$<>".APT" AND OP$="DELETE" THEN ME$="Matched cards deleted" 26400 OU=SC:RETURN 26450 REM 26500 REM 26550 REM 26700 REM 26850 EC$=NU$ 26950 N=LEN(GD$) 27000 PRINT US$;US$;:N=N-2 27050 IF N<>0 THEN PRINT "/";:N=N-1:GOTO 27000 27100 FOR N=1 TO LEN(GD$):PRINT BS$;:NEXT 27150 F=0 27200 F=F+1 27350 WR$=NU$:LN=2:FC=48:LC=57:GOSUB 660 27400 IF EC$="ESC" THEN GOTO 27700 27450 N=VAL(T$):FE$(F)=T$ 27500 IF LEN(T$)<2 THEN FE$(F)="0"+T$ 27550 IF NLV(F) THEN PRINT:PRINT "Bad value, try again...":GOTO 26950 27600 IF F<((LEN(GD$)-INT(LEN(GD$)/3))/2) THEN PRINT "/";:GOTO 27200 27650 IF RIGHT$(GD$,2)="YY" THEN FE$(F)="19"+FE$(F) 27700 RETURN 27750 REM 27751 REM 27850 REM 27900 PRINT CL$ 27950 RESTORE 28000 REM Skip past menus 28050 FOR N=1 TO 4 28100 READ OM 28150 FOR O=1 TO OM:READ O$:NEXT  28200 NEXT 28250 REM 28300 FOR N=1 TO 28:READ C(N):NEXT 28350 FOR N=1 TO 12:READ MS(N):NEXT 28400 FOR N=1 TO 12:READ MN$(N):NEXT 28450 FOR N=1 TO 7:READ DN$(N):NEXT 28550 EC$=NU$:PR$="appointment":TY$=".APT" 28650 REM 28700 FOR N=1 TO 11:PRINT:NEXT 28710 PRINT "So that past appointments can be erased," 28740 PRINT 28750 PRINT "please enter the current date: "; 28800 GD$="MM/DD/YY" 28850 FV(1)=1:FV(2)=1:FV(3)=61 28900 LV(1)=12:LV(2)=31:LV(3)=99:GOSUB 26500 28950 IF EC$="ESC" THEN GOTO 35900 29000 F2$="C"+RIGHT$(FE$(3),2)+FE$(1)+FE$(2) 29050 GOSUB 13850 29075 IF ME$<>NU$ THEN GOTO 35900 29100 X=1 29150 IF X>=L3 THEN GOTO 29300 29170 REM 29200 IF F2$>FT$(X) THEN F$=FT$(X):GOSUB 15150:GOSUB 21150:GOTO 29100 29250 X=X+1:GOTO 29150 29300 PRINT CL$:FOR N=1 TO 11:PRINT:NEXT 29350 PRINT "Display or print (D/P)? "; 29400 LW$=INPUT$(1):GOSUB 900:CH$=UP$:IF CH$=EK$ THEN GOTO 35900 29425 CP$="DISPLAY" 29450 IF CH$="P" THEN CP$="PRINT":OU=PR 29650 REM 29700 PRINT CL$:FOR N=1 TO 11:PRINT:NEXT 29750 PRINT "Enter month and year to view: "; 29850 GD$="MM/YY":FV(1)=1:LV(1)=12 29900 FV(2)=61:LV(2)=99:GOSUB 26500 29950 IF EC$="ESC" THEN GOTO 35900 30000 MM=VAL(FE$(1)):YY=VAL(FE$(2)) 30050 MM$=FE$(1):YY$=FE$(2) 30100 PRINT CL$:FOR N=1 TO 9:PRINT:NEXT 30200 PRINT SPC(13);"Hold on":PRINT:PRINT:PRINT TAB(10);"I'm counting..." 30350 REM 30400 REM 30450 YI=YY-1959 30500 IF YI>28 THEN YI=YI-28:GOTO 30500 30550 CA=C(YI) 30600 REM 30650 MO$=MN$(MM) 30700 REM 30750 IF CA>7 THEN MS(2)=29 30900 FD=CA:REM first day of year 30950 IF CA>7 THEN FD=CA-7 31000 WD=FD:REM week day counter, (modulo 7) 31050 REM 31100 M=0 31150 M=M+1 31200 IF M=MM THEN GOTO 31700 31250 MD=0 31300 MD=MD+1 31350 WD=WD+1 31400 IF WD>7 THEN WD=1 31500 IF MD9 THEN S=9 32450 IF MD<=9 THEN S=10 32500 IF EX<>0 THEN N=1:CO$=":" 32525 IF WD=1 THEN N=N+3 32550 PRINT SPC(S-N);:IF OU=PR THEN LPRINT SPC(S-N); 32575 IF WD=1 THEN N=N-3 32650 PRINT CO$;RIGHT$(STR$(MD),LEN(STR$(MD))-1);CO$;:IF OU=PR THEN LPRINT CO$;RIGHT$(STR$(MD),LEN(STR$(MD))-1);CO$; 32700 IF N=1 AND EX=0 THEN N=0 32750 WD=WD+1 32800 IF WD>7 THEN WD=1:PRINT:PRINT:IF OU=PR THEN LPRINT:LPRINT 32850 IF MDNU$ THEN GOTO 34860 34840 GOTO 34820 34843 IF CP$="PRINT" THEN OU=PR 34845 PRINT STRING$(79,"="):PRINT:PRINT 34846 IF OU=PR THEN LPRINT STRING$(79,"="):LPRINT:LPRINT 34848 OU=SC 34850 CLOSE #F1 34860 RETURN 34869 REM 34900 REM 34910 PRINT:PRINT:PRINT "Enter appointment time: ";:LN=8:FC=32:LC=127:GOSUB 660:IF EC$="ESC" THEN GOTO 34940 34920 KE$=T$:OP$="DELETE":GOSUB 24650 34922 IF ME$<>NU$ THEN GOTO 34940 34925 IF FO$="NOT FOUND" THEN PRINT "Appointment ";ME$:ME$=NU$:FOR X=1 TO 200:NEXT 34930 GOSUB 41150 34940 RETURN 34949 REM 35050 REM 35100 TI$="TIME":GOSUB 6800 35150 PRINT:PRINT:PRINT "Would you like to change this? "; 35160 LW$=INPUT$(1):GOSUB 900:K$=UP$:IF K$=EK$ THEN GOTO 35900 35200 IF K$="Y" THEN GOSUB 37450 35275 IF LEFT$(L$(1),1)=BL$ THEN L$(1)=RIGHT$(L$(1),LEN(L$(1))-1) 35300 KE$=LEFT$(L$(1),8) 35350 IF LEN(KE$)=7 THEN KE$="0"+KE$ 35400 IF LEFT$(KE$,2)="12" THEN KE$="00"+RIGHT$(KE$,6) 35450 KE$=RIGHT$(KE$,2)+LEFT$(KE$,5) 35490 REM 35500 FOR L=1 TO T:L2$(L)=L$(L):NEXT:T2=T 35700 GOSUB 36000:REM INSERT CARD 35800 IF EX=0 AND ME$=NU$ THEN GOSUB 13250 35900 RETURN 35950 REM 35951 REM 36000 REM 36050 REM 36150 REM 36200 EC$=NU$:NF$=NU$ 36300 FO$="NOT FOUND" 36350 DE$="DATA":GOSUB 41555 36400 OPEN "I",#F1,F$+TY$ 36450 OPEN "O",#F2,"TEMP" 36475 IF ME$<>NU$ THEN CLOSE:GOTO 37350 36500 IF NF$="NOFILE" THEN NF$=NU$:GOTO 37150 36550 OU=F1:GOSUB 18500 36600 IF ED$="EOF" THEN GOTO 37150 36650 K2$=LEFT$(L$(1),8) 36700 IF LEN(K2$)=7 THEN K2$="0"+K2$ 36800 IF LEFT$(K2$,2)="12" THEN K2$="00"+RIGHT$(K2$,6) 36850 K2$=RIGHT$(K2$,2)+LEFT$(K2$,5) 36950 FU$="ORDER":GOSUB 23750 36960 IF GI$<>"GOT IT" OR FO$<>"NOT FOUND" THEN GOTO 37100 36970 FO$="FOUND" 36980 PRINT #F2,T2:IF ME$<>NU$ THEN CLOSE:GOTO 37350 36990 FOR L=1 TO T2:PRINT #F2,L2$(L):IF ME$<>NU$ THEN GOTO 37350 37000 NEXT:OU=F2:GOSUB 11250 37010 IF ME$<>NU$ THEN CLOSE:GOTO 37350 37020 GOTO 36550 37100 OU=F2:GOSUB 11250:IF ME$<>NU$ THEN CLOSE:GOTO 37350 37110 GOTO 36500 37150 IF FO$<>"NOT FOUND" THEN GOTO 37200 37160 PRINT #F2,T2:IF ME$<>NU$ THEN CLOSE:GOTO 37350 37170 FOR L=1 TO T2:PRINT #F2,L2$(L):IF ME$<>NU$ THEN CLOSE:GOTO 37350 37180 NEXT 37200 CLOSE #F1,#F2 37250 KILL F$+TY$:NAME "TEMP" AS F$+TY$ 37350 RETURN 37400 REM 37401 REM 37450 REM 37600 EC$=NU$ 37650 IF T=0 THEN ME$="Nothing to change":GOTO 38500 37700 PRINT CL$ 37750 IF ME$<>NU$ THEN PRINT "*** ";ME$;" ***" 37800 IF ME$=NU$ THEN PRINT 37850 ME$=NU$ 37900 PRINT:PRINT:PRINT 37950 NM$="NUMBER":GOSUB 11250 38000 PRINT:PRINT 38010 PRINT "Change, Insert, Delete, Append, or (ESC) ?"; 38020 LW$=INPUT$(1):GOSUB 900:CH$=UP$ 38030 PRINT:PRINT 38050 IF CH$="I" AND T=BS THEN ME$="No more space in the buffer":GOTO 37650 38100 IF CH$="C" THEN GOSUB 10300:GOTO 37650 38150 IF CH$="I" THEN GOSUB 38600:GOTO 37650 38200 IF CH$="D" THEN GOSUB 39550:GOTO 37650 38250 IF CH$="A" THEN GOSUB 40700:GOTO 37650 38300 IF CH$=EK$ THEN CH$=NU$:GOTO 38500 38400 ME$="Choice not on menu" 38450 GOTO 37650:REM end with ESC 38500 RETURN 38550 REM 38551 REM 38600 REM 38700 IF T=BS THEN ME$="Buffer full":GOTO 39450 38750 PRINT "Line below insert: "; 38800 GD$="NN":FV(1)=1:LV(1)=T:GOSUB 26500 38850 IF EC$="ESC" THEN GOTO 39450 38900 I=VAL(FE$(1)) 38950 PRINT 39000 FOR L=T+1 TO I+1 STEP -1:L$(L)=L$(L-1):NEXT 39050 GOSUB 10000:REM NUMBER MARGIN 39100 WR$="WRAP":LN=SW:FC=32:LC=127:GOSUB 660 39200 L$(I)=T$:T=T+1 39250 I=I+1 39300 IF EC$="ESC" THEN GOTO 39450 39350 IF T"ESC" THEN GOTO 40800 41050 RETURN 41100 REM 41101 REM 41150 REM 41200 OPEN "I",#F1,F$+TY$ 41350 IF EOF(F1) THEN CLOSE #F1:GOSUB 21150 41500 CLOSE #F1:RETURN 41550 REM 41551 REM 41555 REM 41556 DK$="NOID" 41557 OPEN "I",#F1,"IDENT-DM":INPUT #F1,DK$:CLOSE 41560 IF DK$="DATA" AND DE$="DATA" THEN GOTO 41595 41561 IF DK$="PROGRAM" AND DE$="PROGRAM" THEN GOTO 41595 41565 PRINT CL$:FOR N=1 TO 7:PRINT:NEXT 41570 PRINT "Insert the Desk Master ";DE$;" disk." 41592 GOSUB 16850:RESET 41593 GOTO 41557 41595 RETURN 41597 REM 41599 REM 41600 REM 41700 IF ERR=53 THEN NF$="NOFILE":RESUME NEXT 41750 IF ERR=61 THEN ME$="Disk Full":RESUME NEXT 41800 IF ERR=57 THEN PRINT "Unrecoverable disk error encountered. Re-start program.":PRINT "Once Desk Master is running again, do not switch":PRINT "when you are instructed to do so." 41850 IF ERR=64 THEN PRINT "Bad character in file name. See manual." 41900 IF ERR=53 THEN PRINT "Check disk, file not found on it." 41999 ON ERROR GOTO 0 42349 REM 42350 REM 42351 REM 42352 REM 42353 REM 42450 REM 42475 REM 42500 DATA 6,"Write Memo  (W)" 42550 DATA "Card File (F)" 42600 DATA "Appointment Calendar (A)" 42650 DATA "Calculator (C)" 42750 DATA "Initiate Data Disk (I)" 42800 DATA "Quit Desk Master Program (ESC)" 42850 REM 42900 DATA 8,"Enter Memo (E)" 42950 DATA "Change or View Memo (C)" 43000 DATA "Print Memo (P)" 43050 DATA "Save Memo on Disk (S)" 43100 DATA "Retrieve Memo from Disk (R)" 43200 DATA "Delete Memo from Disk (D)" 43250 DATA "List Memo Names from Disk (L)" 43300 DATA "Return to Main Menu (ESC)" 43350 REM 43400 DATA 6,"Create File (C)" 43450 DATA "Add Card to File (A)" 43500 DATA "Find Card(s) in File (F)" 43600 DATA "Delete File from Disk (D)" 43650 DATA "List File Names from Disk (L)" 43675 DATA "Return to Main Menu (ESC)" 43700 REM 43750 DATA 4,"Display Matched Cards (D)" 43800 DATA "Erase Matched Cards (E)" 43850 DATA "Print Matched Cards (P)" 43900 DATA "Return to Card File Menu (ESC)" 43950 REM 43951 REM 44100 REM 44150 DATA 13,1,2,3,11,6,7,1,9,4,5,6,14,2,3,4,12,7,1,2,10,5,6,7,8,3,4,5 44200 REM 44250 DATA 31,28,31,30,31,30,31,31,30,31,30,31 44300 REM 44350 DATA "January","February","March","April","May" 44400 DATA "June","July","August","September","October" 44450 DATA "November","December" 44500 DATA "Sunday","Monday","Tuesday","Wednesday" 44550 DATA "Thursday","Friday","Saturday" 50000 REM 50100 REM ecember" 44500 DATA "Sunday","Monday","Tuesday","Wednesday" 4u (ESC)" 43350 REM 43400 DATA 6,"Create File (C)" 43450 DATA "Add Card to File (A)" 43500 DATA "Find Card(s) in File (F)" 43600 DATA "Delete File from Disk (D)" 43650 DATA "List File Names from Disk (L)" 43675 DATA "Return to Main Menu (ESC)" 43700 REM 43750 DATA 4,"Display Matched Cards (D)" 43800 DADESK-DM.BAS and the companion files CALC-DM.BAS, DDISK-DM.BAS, IDENT-DM, INIT-DM.BAS are a very nice little desk manager program written in MBASIC. (The DM in the title stands for DESK MASTER.) There is no document file with it, but it is so simple to run that it almost doesn't need one. One problem I discovered with it is that it uses file number 4 and MBASIC doesn't support this as a default. So to get the program to run properly set it up in the following way. Put MBASIC and the above files on one side on a disk. Set up one of your special function keys (using SETUP on the Osborne master disk) as follows. MBASIC /F:4 RUN "INIT-DM" Save this into the system tracks on the disk with the programs on it. The /F:4 behind the filename will set up the program to handle files #1, #2, #3 and #4. Something I found out, the normal default in MBASIC is only through #3. Reboot the disk. Press ^(num) (whichever number you put the above command sequence in) and the program should load and bring up the original menu. First select the option to initialize the data disk. The data disk must be ANOTHER DISK and it must be in the DEFAULT DRIVE, which will require some disk swapping. The easiest way to do this is to use a "flippy" and put the data files on the back side of the program disk. Once the data files are set up the program will prompt you to change disks from Program to Data and back again as needed. If you get stuck somewhere, the key appears to return you to the preceding step in every case, or else it returns you to the preceding menu. To run this program on any other computer, the only thing that seems to require changing is the clear screen code. This is found in the program on line number 110. Simply change the 26 in the section of the line CL$=CHR$(26) to whatever the clear screen code is for your particular equipment. Resave the program and everything should work great. The other file on the disk DESK-DM.BAS is a squeezed version of the original program. As submitted, the program took up 26K of memory space and on a DD Osborne there is only 27+ K of memory left after Mbasic is loaded. The result was that the computer was stopping every two or three entries to do a fre(0) command and the program ran very slowly. The working DESK-DM.BAS file has had most of the REM statements removed and now only takes up 20K. This seems to work very well. The program was very well annotated with REM statements and for anyone interested in how some of the features were accomplished, unsqueeze the backup file, rename it with the BAS extension and list it. It can be unsqueezed with one of the SQ/USQ programs or NSWEEP205 or a later version of NSWEEP. If you encounter any problems or if you come up with some great changes to improve the performance of these programs, please contact the FOG offices and let us know about it. 5 CLOSE 10 REM CALC SUBPROGRAM 20 REM 30 REM SET UP 40 REM 45 CL$=CHR$(26):RE$=CHR$(13):BS$=CHR$(8):BU$=CHR$(19) 50 EK$=CHR$(27):BL$=" ":NU$="" 55 SC=1:PR=2:F1=3: REM device codes 60 MV=20:L3=0:DIM N$(MV),V(MV) 67 DIM I$(80),P$(80),S(80),S$(80) 68 REM infix, postfix expressions, value, operand stacks 100 OU=SC:REM Default output to screen 199 REM ****************************************** 200 REM *** PRINT HEADER 220 REM 230 PRINT CL$ 240 PRINT "--------------------------------------------------" 250 PRINT SPC(18);"Desk Calculator" 260 PRINT "--------------------------------------------------" 270 PRINT:PRINT "Enter formulas, variable assignments, or commands." 280 PRINT "Type HELP for a list of commands.":PRINT 299 REM ****************************************** 300 REM *** PROMPT AND GET INFIX EXPRESSION 310 REM EXPORT: T$ 330 REM 334 IF ME$<>NU$ THEN PRINT ME$:REM Error message if any 335 IF OU=PR AND ME$<>NU$ THEN LPRINT ME$ 336 ME$=NU$ 337 PRINT:PRINT ": ";: REM prompt for input 338 IF OU=PR THEN LPRINT:LPRINT ": "; 340 LN=80:FC=32:LC=127:GOSUB 20000:REM GET LINE 350 IF EC$="ESC" THEN GOTO 800 360 IF T$=NU$ THEN GOTO 300: REM re-prompt 399 REM **************************************** 400 REM PARSE INFIX EXPRESSION INTO TOKENS 410 REM IMPORT: T$ 420 REM EXPORT: I$(),I 430 REM 450 N$="NOTVAL":IN$="NOTID":REM value,identifier flags 455 I=0 460 FOR C=1 TO LEN(T$):REM For each char in expression 470 C$=MID$(T$,C,1) 475 IF C$=BL$ THEN GOTO 570 480 GOSUB 5000: REM GET CHARACTER TYPE (TP$) 485 IF TP$="Bad character" THEN ME$=TP$:GOTO 300 486 IF TP$<>"NUMERIC" AND N$="VAL" THEN N$="NOTVAL" 490 IF TP$="OPERATOR" AND IN$="ID" AND C$<>"=" THEN ID$=I$(I):GOSUB 1400:I$(I)=RIGHT$(STR$(NU),LEN(STR$(NU))-1):IF ME$<>NU$ THEN GOTO 300 491 IF TP$="OPERATOR" AND IN$="ID" THEN IN$="NOTID":GOTO 508 493 IF TP$="NUMERIC" AND N$="VAL" THEN GOTO 570 499 IF TP$="ALPHA" AND IN$="NOTID" THEN I=I+1:I$(I)=C$:IN$="ID":GOTO 570 502 IF TP$<>"OPERATOR" AND IN$="ID" THEN I$(I)=I$(I)+C$:GOTO 570 505 IF TP$="NUMERIC" AND N$="NOTVAL" THEN I=I+1:I$(I)=RIGHT$(STR$(VAL(RIGHT$(T$,LEN(T$)-C+1))),LEN(STR$(VAL(RIGHT$(T$,LEN(T$)-C+1))))-1):N$="VAL":GOTO 570 508 IF TP$="OPERATOR" THEN I=I+1:I$(I)=C$:GOTO 570 570 NEXT 580 IF IN$="ID" AND I>1 THEN ID$=I$(I):GOSUB 1400:I$(I)=RIGHT$(STR$(NU),LEN(STR$(NU))-1):IF ME$<>NU$ THEN GOTO 300 599 REM ******************************************* 600 REM INTERPRET EXPRESSION 610 REM IMPORT: I$(I) 611 REM 612 IF I=0 THEN GOTO 300 613 LW$=I$(1):GOSUB 900:I1$=UP$ 615 C$=LEFT$(I$(1),1):GOSUB 5000 617 IF TP$="NUMERIC" AND I$(2)="=" THEN ME$="Can't assign a value to a number":GOTO 300 620 IF I$(2)="=" AND I>=2 THEN GOSUB 1500:GOTO 300 621 IF I1$="HELP" THEN GOSUB 6000:GOTO 300 REM LIST COMMANDS 623 IF I1$="LIST" THEN GOSUB 1600:GOTO 300 REM LIST VARIABLE VALUES 625 IF I1$="CLEAR" THEN L3=0:FOR N=1 TO MV:N$(N)=NU$:NEXT:GOTO 300 630 IF I1$="PON" THEN OU=PR:GOTO 300:REM Output to printer 640 IF I1$="POFF" THEN OU=SC:GOTO 300 650 IF I1$="EXAMPLES1" THEN RESTORE:PRINT CL$:FOR X=1 TO 11:READ X$:PRINT X$:NEXT:GOTO 300 660 IF I1$="EXAMPLES2" THEN RESTORE:PRINT CL$:FOR X=1 TO 11:READ X$:NEXT:FOR X=12 TO 23:READ X$:PRINT X$:NEXT:GOTO 300 670 IF I=1 THEN ID$=I$(1):GOSUB 1400:IF ME$=NU$ THEN GOTO 690 671 IF ME$<>NU$ THEN GOTO 300 680 IB=1:GOSUB 1009: REM Default: evaluate expression 690 PRINT BL$;NU:REM Display numeric answer 691 IF OU=PR THEN LPRINT BL$;NU 700 GOTO 300: REM end with ESC 800 DE$="PROGRAM":GOSUB 2570:REM CHECK DISK ID 810 PRINT CL$:FOR N=1 TO 11:PRINT:NEXT 820 PRINT SPC(13);"Reloading Desk Master...":CHAIN "DESK-DM.BAS" 898 REM ****************************************** 899 REM ****************************************** 900 REM *** TRANSLATE UPPERCASE TO LOWERCASE *** 910 REM IMPORT: LW$ (lowercase string) 915 REM EXPORT: UP$ (UPPERCASE STRING) 920 UP$=NU$ 930 FOR N=1 TO LEN(LW$) 940 C$=MID$(LW$,N,1) 950 IF C$>"Z" THEN C$=CHR$(ASC(C$)-32) 960 UP$=UP$+C$ 970 NEXT 980 RETURN 999 REM *************************************** 1009 REM *** CONVERT INFIX EXPRESSION TO POSTFIX *** 1030 REM IMPORT: I$(),I 1035 REM EXPORT: P$(),P 1040 REM 1060 TP=0:P=0:REM Top of stack 1062 FOR C=IB TO I 1064 C$=I$(C) 1066 IF C$=")" THEN GOSUB 2000:GOTO 1090 1068 PC=1:PS=1 1070 IF C$<>"/" AND C$<>"*" AND C$<>"-" AND C$<>"+" THEN GOTO 1084 1072 IF C$="*" OR C$="/" THEN PC=2 1074 IF TP=0 THEN PS=0: GOTO 1080 1076 IF S$(TP)="*" OR S$(TP)="/" THEN PS=2 1078 IF S$(TP)="(" THEN PS=0 1080 IF PC>PS THEN TP=TP+1:S$(TP)=C$:GOTO 1090 1082 IF PCL3 THEN ME$="Undefined variable":GOTO 1470 1440 IF N$(N)=ID$ THEN NU=V(N):GOTO 1470 1450 GOTO 1430 1460 ME$="Undefined variable" 1470 RETURN 1499 REM ****************************************** 1500 REM *** ASSIGN A VALUE TO A VARIABLE *** 1510 REM IMPORT: I$(),I 1515 REM EXPORT: IB,ME$ 1520 C$=LEFT$(I$(3),1):GOSUB 5000 REM GET TYPE 1530 IF I=3 AND TP$="NUMERIC" THEN NU=VAL(I$(3)) 1540 IF I=3 AND TP$="ALPHA" THEN ID$=I$(3):GOSUB 1400 1550 IF I>3 THEN IB=3:GOSUB 1009:REM POSTFIX AND EXECUTE 1555 IF ME$<>NU$ THEN GOTO 1599 1560 ID$=I$(1):GOSUB 1300 REM PUT VALUE IN TABLE 1570 RETURN 1599 REM *************************************** 1600 REM DISPLAY VARIABLES 1610 REM 1620 PRINT:PRINT 1625 IF L3<1 THEN PRINT "No variables set":GOTO 1680 1630 PRINT "::::::::::::: SET VARIABLES ::::::::::::":PRINT 1635 IF OU=PR THEN LPRINT "::::::::::::::: SET VARIABLES ::::::::::::::":LPRINT 1650 FOR N=1 TO L3 1660 PRINT N$(N);"=";V(N) 1665 IF OU=PR THEN LPRINT N$(N);"=";V(N) 1670 NEXT 1680 RETURN 1699 REM ******************************************* 2000 REM *** EMPTY OPERATOR STACK *** 2010 REM 2020 IF TP=0 THEN GOTO 2080 2030 FOR N=TP TO 1 STEP -1 2050 IF S$(TP)<>"(" THEN P=P+1:P$(P)=S$(TP) 2060 TP=TP-1 2070 NEXT 2080 RETURN 2099 REM ***************************************** 2500 REM *** WAIT FOR RESPONSE *** 2510 PRINT:PRINT:PRINT 2520 PRINT SPC(13);"Hit any key to continue..."; 2530 K$=INPUT$(1) 2540 RETURN 2550 REM ***************************************** 2570 REM *** CHECK DISK ID *** 2580 DK$="NOID" 2590 OPEN "I",#F1,"IDENT-DM" 2600 INPUT #F1,DK$ 2605 CLOSE #F1 2610 IF DK$="DATA" AND DE$="DATA" THEN GOTO 2670 2620 IF DK$="PROGRAM" AND DE$="PROGRAM" THEN GOTO 2670 2630 PRINT CL$:FOR N=1 TO 11:PRINT:NEXT 2640 PRINT "Insert the Desk Master ";DE$;" disk." 2645 RESTORE 2650 GOSUB 2500: REM PAUSE 2660 GOTO 2590 2670 RETURN 2679 REM *************************************** 5000 REM *** DETERMINE CHARACTER TYPE *** 5010 REM IMPORT: C$ 5015 REM EXPORT: TP$ 5025 TP$="Bad character" 5030 IF (C$>="A" AND C$<="Z") OR (C$>="a" AND C$<="z")THEN TP$="ALPHA" 5040 IF (C$>="0" AND C$<="9") OR C$="." THEN TP$="NUMERIC" 5050 IF C$=")" OR C$="(" OR C$="+" OR C$="-" OR C$="*"OR C$="/" OR C$="=" THEN TP$="OPERATOR" 5060 RETURN 5099 REM **************************************** 6000 REM *** LIST COMMANDS *** 6010 RESTORE:FOR N=1 TO 23:READ X$:NEXT 6020 FOR N=24 TO 33 6030 READ X$ 6040 PRINT X$ 6050 IF OU=PR THEN LPRINT X$ 6060 NEXT 6065 PRINT 6070 PRINT "Like HELP, type command after colon.":PRINT 6080 RETURN 6099 REM ****************************************** 7000 REM *** SOPHISTICATED ERROR ROUTINE *** 7010 ME$="Error in expression":GOTO 300 7020 REM So much for sophistication 7099 REM ***************************************** 20000 REM *** GET LINE *** 20020 REM IMPORT: LN,FC,LC 20030 REM EXPORT: T$,EC$ 20040 REM 20060 EC$=NU$:T$=NU$ 20080 C=0: REM for each character input 20090 C=C+1: C$=INPUT$(1): REM get character 20095 IF C$=BU$ THEN C$=BS$:PRINT C$; 20100 IF C$=EK$ THEN EC$="ESC":GOTO 20250 20150 IF C$=RE$ THEN PRINT:GOTO 20250 20160 IF (ASC(C$)LC) AND C$<>BS$ THEN C=C-1:GOTO 20090 20170 IF C$=BS$ AND C=1 THEN PRINT;:GOTO 20060 20180 PRINT C$;:IF OU=PR THEN LPRINT C$; 20190 IF C$=BS$ AND C<=2 THEN PRINT :PRINT ": ";:GOTO 20000 20200 IF C$=BS$ AND C>2 THEN C=C-2:T$=LEFT$(T$,C):GOTO 20090 20210 IF C=LN THEN T$=T$+C$:GOTO 20250 20240 T$=T$+C$:GOTO 20090 REM add character and get another 20250 IF OU=PR THEN LPRINT 20251 RETURN 49999 REM **************************************** 50000 DATA "Simple calculations: "," "," " 50010 DATA ": 2+2"," 4"," ",": 5*5"," 25"," " 50020 DATA ": 2+(8/2)"," 6" 50030 DATA "Assignments: "," "," " 50040 DATA ": A=15"," ",": A"," 15"," " 50050 DATA ": TOTAL=A+15"," ",": TOTAL"," 30" 50060 DATA " " 50070 DATA " List of commands" 50080 DATA " " 50090 DATA "PON.................TURNS PRINTER ON" 50100 DATA "POFF................TURNS PRINTER OFF" 50110 DATA "LIST................LIST VALUES OF VARIABLES" 50120 DATA "CLEAR...............ERASES ALL VARIABLES" 50130 DATA "HELP................LIST THESE COMMANDS" 50140 DATA "EXAMPLES1...........SIMPLE CALCULATIONS" 50150 DATA "EXAMPLES2...........VARIABLE ASSIGNMENTS" 50160 DATA " " 55555 END A "EXAMPLES1...........SIMPLE CALCULATIONS" 50150 DATA "EXAMPLES2...........VARIAB(T$,C):GOTO 20090 20210 IF C=LN THEN T$=T$+C$:GOTO 20250 20240 T$=T$+C$:GOTO 20090 REM add character and get another 20250 IF OU=PR THEN LPRINT 20251 RETURN 49999 REM **************************************** 50000 DATA "Simple calculations: "," "," " 50010 DATA ": 2+2"," 4"," ",": 5*5"," 25"," " 50020 DATA ": 2+(8/2)"," 6" 50030 DATA "Assignments: "," "," " 50040 DATA ": A=15"," ",": A"," 15"," " 50050 DATA ": TOTAL=A+15"," ",": TOTAL"," 30" 50060 DATA " " 50070 DATA " List of comman5 CLOSE:ON ERROR GOTO 3000 10 REM *** DATA DISK INITIATER *** 15 CL$=CHR$(26):F1=1 20 PRINT CL$:FOR N=1 TO 11:PRINT:NEXT 30 PRINT "Insert a blank, CP/M formatted disk to be" 40 PRINT "set up as a Desk Master data disk." 50 PRINT 60 PRINT "WARNING: The current contents of the" 70 PRINT "inserted disk will be lost." 80 PRINT:PRINT:PRINT 90 GOSUB 2500:RESET: REM Pause 99 REM *************************************** 100 REM 170 REM *** SET UP INDEX FILES *** 175 REM Label disk for data 180 OPEN "O",#F1,"IDENT-DM" 190 PRINT #F1,"DATA" 200 CLOSE #F1 250 PRINT CL$:FOR N=1 TO 11:PRINT:NEXT 260 PRINT SPC(6);"Writing file indexes..." 300 OPEN "O",#F1,"MEMINDEX":GOSUB 700:CLOSE #F1 310 OPEN "O",#F1,"CDXINDEX":GOSUB 700:CLOSE #F1 320 OPEN "O",#F1,"APTINDEX":GOSUB 700:CLOSE #F1 330 PRINT CL$:FOR N=1 TO 11:PRINT:NEXT 399 REM *************************************** 400 REM *** RETURN TO MAIN PROGRAM *** 410 PRINT "Insert the Desk Master program disk again..." 420 GOSUB 2500:REM PAUSE 430 DE$="PROGRAM":GOSUB 2570:REM CHECK DISK ID 550 PRINT CL$:FOR N=1 TO 11:PRINT:NEXT 570 PRINT SPC(12);"Reloading Desk Master" 580 CHAIN "DESK-DM.BAS" 599 END:REM ************************************* 600 REM 700 REM *** WRITE INDEXES *** 710 PRINT #F1,"0L" 720 FOR F=1 TO 39:PRINT #F1,"0N":NEXT 730 RETURN 740 REM ***************************************** 2500 REM *** PAUSE FOR RESPONSE *** 2510 PRINT:PRINT:PRINT 2520 PRINT "Hit any key to continue..."; 2530 K$=INPUT$(1) 2540 RETURN 2550 REM *********************************** 2570 REM *** CHECK DISK ID *** 2580 DK$="NOID" 2590 OPEN "I",#F1,"IDENT-DM" 2600 INPUT #F1,DK$ 2610 CLOSE #F1 2620 IF DK$="DATA" AND DE$="DATA" THEN GOTO 2670 2630 IF DK$="PROGRAM" AND DE$="PROGRAM" THEN GOTO 2670 2640 PRINT CL$:FOR N=1 TO 7:PRINT:NEXT 2645 PRINT "Insert the Desk Master ";DE$;" disk." 2650 GOSUB 2500:RESET:REM PAUSE 2660 GOTO 2590:REM Until proper disk in drive 2670 RETURN 2999 REM ************************************* 3000 REM *** ERROR ROUTINE *** 3010 PRINT CL$:FOR N=1 TO 10:PRINT:NEXT 3020 IF ERR=53 THEN PRINT "File not found: " 3030 IF ERR=57 THEN PRINT "Disk problem:" 3040 IF ERR=61 THEN PRINT "Disk full:" 3050 PRINT:PRINT 3060 PRINT "Make sure you want to use the inserted disk" 3070 PRINT "for Desk Master data, then FORMAT it again" 3080 PRINT "for CP/M and re-initiate it. Otherwise, try" 3090 PRINT "another blank disk." 3100 IF ERR<>53 AND ERR<>57 AND ERR<>61 THEN GOTO 4000 3110 PRINT:PRINT:PRINT 3120 PRINT "Hit any key to return to main menu..." 3130 K$=INPUT$(1):RESUME 400 4000 ON ERROR GOTO 0 110 PRINT:PRINT:PRINT 3120 PRINT "Hit any key to return 2610 CLOSE #F1 2620 IF DK$="DATA" AND DE$="DATA" THEN GOTO 2670 2630 IF DK$="PROGRAM" AND DE$="PROGRAM" THEN GOTO 2670 2640 PRINT CL$:FOR N=1 TO 7:PRINT:NEXT 2645 PRINT "Insert the Desk Master ";DE$;" disk." 2650 GOSUB 2500:RESET:REM PAUSE 2660 GOTO 2590:REM Until proper disk in drive 2670 RETURN 2999 REM ************************************* 3000 REM *** ERROR ROUTINE ***"PROGRAM" BASLIST2COM'()BASLIST2DOC}*+,-./0123456789BASLIST2BAS*:;<=>?DESK-DM BAS@ABCDEFGHIJKLMNODESK-DM BASUPQRSTUVWXYZDESK-DM DOC[\]CALC-DM BAST^_`abcdefghDDISK-DMBASijkIDENT-DM$$$10 CLOSE 50 CL$=CHR$(26):NU$="":EK$=CHR$(27) 260 PRINT CL$ 265 PRINT STRING$(45,"*") 267 FOR N=2 TO 21 270 PRINT "*"; 273 IF N=8 THEN PRINT SPC(12);"Presenting Desk Master";SPC(9);:GOTO 300 275 IF N=12 THEN PRINT SPC(9);"Personal Computing Magazine";SPC(7);:GOTO 300 277 IF N=17 THEN PRINT SPC(15);STRING$(14,"=");SPC(14);:GOTO 300 279 IF N=15 THEN PRINT SPC(21);"By";SPC(20);:GOTO 300 282 IF N=10 THEN PRINT SPC(20);"From";SPC(19);:GOTO 300 284 IF N=18 THEN PRINT SPC(16);"Leon LJ Starr";SPC(14);:GOTO 300 286 IF N=19 THEN PRINT SPC(15);STRING$(14,"=");SPC(14);:GOTO 300 293 PRINT SPC(43); 300 PRINT "*":NEXT 301 PRINT STRING$(45,"*"); 310 CHAIN "DESK-DM.BAS" 317 END ,"=");SPC(14);:GOTO 300 293 PRINT SPC(43); 300 PRINT "*":NEXT 301 PRINT STRIN10 ' WIPE$ homes the cursor and clears the screen 20 ' CUR$ (followed by string X and Y values) puts the 30 ' cursor at X,Y. NOLINE$ erases from the cursor to 40 ' the end of the line. GREY$ begins half-intensity 50 ' display; WHT$ restores full intensity. LEAF$ and 60 ' TRUNK$ each hold a whole line's worth of graphic 70 ' herbiage; DIRT$ holds a line's worth of graphic 80 ''dirt'(maybe its really grass?) 90 ' 100 WIPE$=CHR$(26):CUR$=CHR$(27)+"=":LEAF$="":TRUNK$="" 110 NOLINE$=CHR$(&H1B)+CHR$(&H54):GREY$=CHR$(27)+")" 120 WHT$=CHR$(27)+"(" 130 FOR I=1 TO 25:LEAF$=LEAF$+CHR$(141)+" ":NEXT I 140 FOR I=1 TO 25:TRUNK$=TRUNK$+CHR$(139)+" ":NEXT I 150 FOR I=1 TO 50:DIRT$=DIRT$+CHR$(150):NEXT I 160 WALL$=" "+CHR$(150)+CHR$(150)+CHR$(150)+CHR$(150) 170 FEN$=" "+CHR$(128)+CHR$(128)+CHR$(128)+CHR$(128) 180 ROOF$=CHR$(138)+CHR$(136)+CHR$(138)+CHR$(136) 190 PRINT WIPE$ 200 PRINT:PRINT:PRINT TAB(25)"DUCK" 210 PRINT:PRINT:PRINT 220 INPUT" Do you want instructions (Y/N)? ",I$ 230 IF I$="N" OR I$="n" GOTO 440 240 PRINT WIPE$; 250 PRINT"The object of the game is to make the most points" 260 PRINT"shooting ducks without getting divebombed or blown" 270 PRINT"up. Shot ducks score from 10 to 50 points, depen-" 280 PRINT"ding on the angle of the shot. A duck shot directly" 290 PRINT"overhead (key 5) only scores 10 points, but ducks" 300 PRINT"shot on the steepest angles (keys 1 or 9) score 50" 310 PRINT"points. Only four consecutive shots from the same" 320 PRINT"angle are allowed. If you miss, the duck may bomb" 330 PRINT"you or your protecting trees. If more than five" 340 PRINT"trees are lost from either side of your blind," 350 PRINT"you are liable to be divebombed from that side. You" 360 PRINT"can survive if your ammunition is not hit. The duck" 370 PRINT"can also hit your ammunition with a bomb from di-" 380 PRINT"rectly overhead." 385 PRINT 390 PRINT"Five bonus points are scored for each surviving" 400 PRINT"tree as long as at least one duck was hit. 20" 410 PRINT"points are scored for trees that survive through" 420 PRINT"an entire game, but no bonus points are scored if" 430 PRINT"no ducks were hit." 440 PRINT:PRINT TAB(16);"Press any key to begin." 450 A$=INKEY$:IF A$<>"" THEN GOTO 490 460 ROLL=ROLL+1 470 IF ROLL > 32767 THEN ROLL = -32768! 480 GOTO 450 490 RANDOMIZE ROLL 500 DIM L(22) 510 FOR Y= 1 TO 22:READ L(Y):NEXT Y 520 PRINT WIPE$ 530 M=0:N=0:Q=11:Z=11:V=0:P=0:H=0:S=0:T=0:A$="":C2=0 540 D=INT(RND(1)*4) 550 PRINT CUR$;CHR$(55);" "; 560 PRINT GREY$;LEAF$:PRINT TRUNK$:PRINT DIRT$:PRINT DIRT$ 570 PRINT WHT$; 580 PRINT CUR$;CHR$(52);CHR$(54);WALL$; 590 PRINT CUR$;CHR$(51);CHR$(54);FEN$; 600 PRINT CUR$;CHR$(50);CHR$(55);ROOF$; 610 PRINT CUR$;" ";CHR$(33);"FIRE AT ANGLE 1 TO 9" 620 X=0 630 FOR Y= 0 TO 52 STEP 1 640 PRINT CUR$;CHR$(33+X);CHR$(32+Y);" "; 650 PRINT CHR$(152);CHR$(136) 660 IF X<18 GOTO 690 670 IF X=18 AND Y=23 THEN X=0:Y=0:GOTO 630 680 IF X=19 AND Y = 23 GOTO 1420 690 A$=INKEY$:IF VAL(A$)=0 GOTO 870 700 IF VAL(A$)=H THEN C2=C2+1 710 IF VAL(A$)<>H AND VAL(A$)>0 THEN C2=0 720 IF C2>3 GOTO 870 730 H=VAL(A$) 740 V=V+1 750 PRINT CUR$;" ";100-V;"Bullets remaining " 760 A=6*VAL(A$)-30 770 S=X:T=Y 780 FOR X=0 TO -16 STEP-1 790 PRINT CUR$;CHR$(49+X);CHR$(57+INT(A*ABS(X)/10));"*" 800 PRINT CUR$;CHR$(49+X);CHR$(57+INT(A*ABS(X)/10));" " 810 IF S<>X+16 GOTO 840 820 IF T=INT(22+A*ABS(X)/10) OR T=INT(23+A*ABS(X)/10) THEN GOTO 1180 830 IF V= 100 GOTO 1430 840 NEXT X 850 GOSUB 1250 860 X=S:Y=T 870 NEXT Y 880 PRINT CUR$;CHR$(33+X);CHR$(86);" "; 890 X=INT(RND(1)*(15+N)) 900 FOR Y=52 TO 0 STEP-1 910 PRINT CUR$;CHR$(33+X);CHR$(32+Y);CHR$(138);CHR$(152); 920 PRINT " " 930 IF X<18 GOTO 960 940 IF X=18 AND Y=23 THEN X=0:Y=0:GOTO 630 950 IF X=19 AND Y=23 GOTO 1420 960 A$=INKEY$:IF VAL(A$)=0 GOTO 1140 970 IF VAL(A$)=H THEN C2=C2+1 980 IF VAL(A$)<>H AND VAL(A$)>0 THEN C2=0 990 IF C2>3 GOTO 1140 1000 H=VAL(A$) 1010 V=V+1 1020 PRINT CUR$;" ";100-V;"Bullets remaining " 1030 A=6*VAL(A$)-30 1040 S=X:T=Y 1050 FOR X=0 TO -16 STEP-1  1060 PRINT CUR$;CHR$(49+X);CHR$(57+INT(A*ABS(X)/10));"*" 1070 PRINT CUR$;CHR$(49+X);CHR$(57+INT(A*ABS(X)/10));" " 1080 IF S<>X+16 GOTO 1110 1090 IF T= INT(25+A*ABS(X)/10) OR T=INT(24+A*ABS(X)/10) THEN GOTO 1180 1100 IF V=100 GOTO 1430 1110 NEXT X 1120 GOSUB 1250 1130 X=S:Y=T 1140 NEXT Y 1150 PRINT CUR$;CHR$(X+33);" "; 1160 X=INT(RND(1)*(15+C)) 1170 GOTO 630 1180 PRINT CHR$(7); 1190 P=P+ABS(VAL(A$)-5)*10+10 1200 PRINT CUR$;" ";CHR$(69);P;"Points"; 1210 IF V=100 GOTO 1430 1220 PRINT CUR$;CHR$(33+S);" ";NOLINE$; 1230 X=0:Y=0 1240 GOTO 630 1250 W=INT(RND(1)*3) 1260 IF W=>1 THEN RETURN 1270 FOR M=0 TO 19-S STEP 1 1280 FOR E= 1 TO 20:NEXT E 1290 PRINT CUR$;CHR$(34+M+S);CHR$(34+T);CHR$(141) 1300 PRINT CUR$;CHR$(34+M+S);CHR$(34+T);" " 1310 IF T=D+21 AND M=19-S THEN GOSUB 1420 1320 NEXT M 1330 FOR B= 1 TO 22 1340 IF L(B)= T+2 THEN L(B)=-1:GOTO 1370 1350 NEXT B 1360 GOTO 1410 1370 IF T+2<21 THEN Q=Q-1 1380 IF T+2>27 THEN Z=Z-1 1390 IF Q<7 THEN C=5:PRINT CUR$;" ";CHR$(59);"DUCK ! " 1400 IF Z<7 THEN N=5:PRINT CUR$;" ";CHR$(59);"DUCK !" 1410 RETURN 1420 GOSUB 1590 1430 FOR I=32 TO 49:PRINT CUR$;CHR$(I);" ";NOLINE$:NEXT I 1440 PRINT CHR$(&H1E); 1450 PRINT TAB(23);"GAME OVER" 1460 PRINT:PRINT:PRINT: 1470 IF P=0 THEN 1480 ELSE 1500 1480 PRINT TAB(10)"YOU BOMBED OUT -- NO POINTS SCORED" 1490 GOTO 1550 1500 IF V=100 THEN BONUS=20 ELSE BONUS=5 1510 PRINT TAB(10)" You had";Q+Z;"trees remaining worth" 1520 PRINT:PRINT TAB(17);(Q+Z)*BONUS; "bonus points." 1530 PRINT:PRINT TAB(13);" Your score was";P+(Q+Z)*BONUS;"points." 1540 DATA 0,2,4,6,8,10,12,14,16,18,20,28,30,32,34,36,38,40,42,44,46,48 1550 FOR I=1 TO 4:PRINT:NEXT I 1560 PRINT TAB(12);:INPUT" Try it again (Y/N)? ",AGAIN$ 1570 IF AGAIN$="Y" THEN A$=INKEY$:RESTORE:GOTO 510 1580 END 1590 FOR G=0 TO 21 1600 PRINT CUR$;CHR$(53);CHR$(54+G);" " 1610 PRINT CUR$;CHR$(53);CHR$(58-G);" " 1620 PRINT CUR$;CHR$(54);CHR$(54+G/2);" " 1630 PRINT CUR$;CHR$(54);CHR$(58-G/2);" " 1640 PRINT CUR$;CHR$(51-G);CHR$(55);" " 1650 PRINT CUR$;CHR$(50-G);CHR$(55);ROOF$ 1660 PRINT CUR$;CHR$(52-G);CHR$(56-G);" " 1670 PRINT CUR$;CHR$(51-G);CHR$(55-G);CHR$(128) 1680 PRINT CUR$;CHR$(52-G);CHR$(56+G);" " 1690 PRINT CUR$;CHR$(51-G);CHR$(57+G);CHR$(128);CHR$(128) 1700 PRINT CUR$;CHR$(53-G);CHR$(56+G/2);" " 1710 PRINT CUR$;CHR$(52-G);CHR$(57+G/2);CHR$(150) 1720 PRINT CUR$;CHR$(51);CHR$(58-G);" " 1730 PRINT CUR$;CHR$(52);CHR$(55-G);CHR$(150);" " 1740 PRINT CUR$;CHR$(51);CHR$(51+G);" " 1750 PRINT CUR$;CHR$(52);CHR$(57+G);" ";CHR$(159) 1760 NEXT G 1770 RETURN 50);" " 1740 PRINT CUR$;CHR$(51);CHR$(51+G);" " 1750 PRINT CUR$;CHR$(52);CHR$(57+G);" ";CHR$(159) 1760 4:PRINT:NEXT I 1560 PRINT TAB(12);:INPUT" Try it again (Y/N)? ",AGAIN$ 1570 IF AGAIN$="Y" THEN A$=INKEY$:RESTORE:GOTO 510 1580 END 1590 FOR G=0 TO 21 1600 PRINT CUR$;CHR$(53);CHR$(54+G);" " 1610 PRINT CUR$;CHR$(53);CHR$(58-G);" " 1620 PRINT CUR$;CHR$(54);CHR$(54+G/2);" " 1630 PRINT CUR$;CHR$(54);CHR$(58-G/2);" " 1640 PRINT CUR$;CHR$(51-G);CHR$(55);" " 1650 PRINT C10 REM ************************************************************** 20 REM ************************************************************** 30 REM *** *** 40 REM *** C L A S S G R A D E M A I N T E N A N C E *** 50 REM *** *** 60 REM *** P R O G R A M *** 70 REM *** *** 80 REM *** HARRY HAWKINS NOVEMBER, 1983 *** 90 REM *** *** 100 REM *** CONFIGURED FOR THE OSBORNE EXECUTIVE *** 110 REM *** *** 120 REM ************************************************************** 130 REM ************************************************************** 140 REM 150 GOSUB 3010:REM **** CLEAR SCREEN SUBROUTINE  **** 160 DIM AR(200): REM ***** CLEAR SCREEN SUBROUTINE ***** 170 LINE INPUT "ENTER TODAY'S DATE SUCH AS: NOV. 18, 1983.";Z$ 180 DATE$=Z$ 190 INPUT "DO YOU WANT TO MAKE CHANGES IN AN EXISTING FILE? .";Z$ 200 IF Z$="Y" THEN 280 210 INPUT "DO YOU WANT TO CREATE A NEW CLASS LIST? .";Z$ 220 IF Z$="N" THEN 280 230 INPUT "ENTER NEW CLASS NUMBER AND SECTION.";Z$ 240 LET Z1$=Z$: OPEN"R",#1,Z$: REM *** OPEN CLASS DATA FILE *** 250 FIELD#1,30 AS NA$,30 AS AD$,11 AS NU$,1 AS FL$,1 AS LG$,7 AS T0$,48 AS T1$ 260 GOTO 520 270 GOSUB 3010 280 INPUT "ENTER CLASS NUMBER AND SECTION.";Z$ 290 LET Z1$=Z$ 300 OPEN "R",#1,Z$ 310 FIELD#1,30 AS NA$,30 AS AD$,11 AS NU$,1 AS FL$,1 AS LG$,7 AS T0$,48 AS T1$ 320 GOSUB 3010 330 PRINT " S E L E C T I O N M E N U " 340 PRINT 350 PRINT " 1. INSERT NEW TEST GRADES ........... TYPE " 360 PRINT " 2. ADD NEW STUDENTS TO THE LIST ..... TYPE " 370 PRINT " 3. DELETE STUDENTS FROM LIST ........ TYPE " 380 PRINT " 4. CORRECT STUDENT GRADES ........... TYPE " 390 PRINT " 5. CALCULATE LETTER GRADES .......... TYPE " 400 PRINT " 6. GET A CLASS LISTING .............. TYPE " 410 PRINT " 7. EXIT FROM THE PROGRAM ............ TYPE " 420 PRINT 430 INPUT "MAKE SELECTION FROM MENU:";Z$ 440 IF Z$="TST" THEN 750 450 IF Z$="STU" THEN 1220 460 IF Z$="DEL" THEN 1430 470 IF Z$="COR" THEN 1530 480 IF Z$="LTR" THEN 1850 490 IF Z$="LST" THEN 2450 500 IF Z$="EX" THEN CLOSE #1:END 510 GOTO 150 520 GOSUB 3010 530 INPUT "ENTER THE NUMBER OF STUDENTS IN THE CLASS.";Q 540 GET #1,1 550 LSET NA$="0" 560 LSET AD$="0" 570 LSET LG$=" " 580 RSET NU$=STR$(Q) 590 RSET T0$=STR$(Q) 600 Q=Q+1 610 PUT #1,1 620 FOR J=2 TO Q 630 INPUT "ENTER STUDENT NAME.";Z$ 640 LSET NA$=Z$ 650 INPUT "ENTER STUDENT'S LOCAL ADDRESS, (NUMBER & DORM OR STREET ONLY)";Z$ 660 LSET AD$=Z$ 670 INPUT "ENTER STUDENT NUMBER.";Z$ 680 LSET NU$=Z$ 690 LSET FL$=" " 700 LSET LG$=" " 710 RSET T0$="0" 720 PUT #1,J 730 NEXT J 740 GOTO 320 750 GOSUB 3010 760 GET #1,1 770 R%=VAL(NA$)*5 780 PRINT "YOU HAVE ALREADY GIVEN ";NA$ 790 PRINT "TESTS WITH A MAXIMUM POSSIBLE SCORE OF ";AD$;" ." 800 INPUT "DO YOU WISH TO MAKE ANY CORRECTIONS WITH THIS DATA? .";Z$ 810 IF Z$="N" THEN 920 820 PRINT "IS THE MAXIMUM POSSIBLE SCORE OF ";MID$(AD$,1,5);" CORRECT? ." 830 INPUT Z$ 840 IF Z$="Y" THEN 870 850 INPUT "ENTER CORRECT MAXIMUM SCORE.";Z$ 860 LSET AD$=Z$ 870 PRINT "IS ";MID$(NA$,1,5);" THE CORRECT NUMBER OF TESTS GIVEN? ." 880 INPUT Z$ 890 IF Z$="Y" THEN 920 900 INPUT "ENTER THE CORRECT NUMBER OF TESTS GIVEN.";Z$ 910 LSET NA$=Z$ 920 LSET NA$=STR$(VAL(NA$)+1) 930 INPUT "ENTER THE MAXIMUM POSSIBLE SCORE OF THIS TEST.";Z$ 940 C=VAL(Z$) 950 LSET AD$=STR$(VAL(AD$)+VAL(Z$)) 960 LSET T1$=MID$(T1$,1,R%)+MID$(Z$,1,5) 970 PUT #1,1 980 GET #1,1 990 Q=VAL(NU$)+1 1000 S=VAL(T0$) 1010 FOR J=2 TO Q 1020 GET #1,J 1030 IF FL$="W" THEN 1120 1040 PRINT "ENTER TEST SCORE FOR ";NA$ 1050 INPUT Z$ 1060 IF VAL(Z$)>C THEN 1040 1070 LSET T0$=STR$(VAL(T0$)+VAL(Z$)) 1080 LSET T1$=MID$(T1$,1,R%)+MID$(Z$,1,5) 1090 PUT #1,J 1100 T=T+VAL(Z$) 1110 T2=T2+(VAL(Z$)^2) 1120 NEXT J 1130 A=T/S 1140 T=T^2 1150 D=SQR((T2-(T/S))/S) 1160 PRINT "AVERAGE OF THIS TEST IS: ";A 1170 PRINT "STANDARD DEVIATION OF THIS TEST IS: ";D 1180 PRINT:PRINT "" 1190 O$=INKEY$ 1200 IF O$="" THEN 1190 ELSE 1210 1210 GOTO 320 1220 INPUT "HOW MANY STUDENTS DO YOU WANT TO ADD TO THE LIST?";Z 1230 GET #1,1 1240 Q=VAL(NU$)+1 1250 RSET NU$=STR$(VAL(NU$)+Z) 1260 RSET T0$=STR$(VAL(T0$)+Z) 1270 PUT #1,1 1280 FOR J=1 TO Z 1290 INPUT "ENTER STUDENT'S NAME.";Z$ 1300 LSET NA$=Z$ 1310 INPUT "ENTER STUDENT'S ADDRESS.";Z$ 1320 LSET AD$=Z$ 1330 INPUT "ENTER NEW STUDENT'S NUMBER.";Z$ 1340 LSET NU$=Z$ 1350 LSET FL$=" " 1360 LSET LG$=" " 1370 LSET T0$="0" 1380 LSET T1$="0" 1390 B=J+Q 1400 PUT #1,B 1410 NEXT J 1420 GOTO 320 1430 GOSUB 3010 1440 INPUT "ENTER THE NUMBER LOCATION IN THE LIST OF THE STUDENT TO DROP.";Z 1450 Z=Z+1 1460 GET #1,Z 1470 LSET FL$="W" 1480 PUT #1,Z 1490 GET #1,1 1500 RSET T0$=STR$(VAL(T0$)-1) 1510 PUT #1,1 1520 GOTO 320 1530 GOSUB 3010 1540 INPUT "ENTER THE NAME OF STUDENT WHOSE GRADE(S) YOU WANT TO CORRECT.";Z$ 1550 GET #1,1 1560 Q=VAL(NU$)+1 1570 Z=VAL(NA$) 1580 R%=1 1590 FOR Y=1 TO Q 1600 GET #1,Y 1610 IF NA$=Z$ THEN 1630 1620 NEXT Y 1630 FOR A=1 TO Z 1640 AR(A)=VAL(MID$(T1$,R%,5)) 1650 NEXT A 1660 GOSUB 3010 1670 PRINT "YOU ARE ABOUT TO CHANGE TEST SCORES FOR ";NA$ 1680 INPUT "ANSWER Y(ES) OR N(O).";Z$ 1690 IF Z$="N" THEN 1530 1700 INPUT "HOW MANY TEST SCORES DO YOU WANT TO CHANGE?";C 1710 FOR A=1 TO C 1720 INPUT "WHICH TEST SCORE DO YOU WANT TO CHANGE?";B 1730 INPUT "ENTER CORRECT TEST SCORE.";AR(B) 1740 NEXT A 1750 RSET T0$="0" 1760 LSET T1$=" " 1770 R%=1 1780 FOR J=1 TO Z 1790 RSET T0$=STR$(VAL(T0$)+AR(J)) 1800 LSET T1$=MID$(T1$,1,R%)+STR$(AR(J)) 1810 R%=R%+5 1820 NEXT J 1830 PUT #1,Y 1840 GOTO 320 1850 GOSUB 3010 1860 PRINT"DO YOU WANT LETTER GRADES DETERMINED ON THE BASIS OF A NORMAL CURVE?" 1870 INPUT "ANSWER Y(ES) OR N(O)";Z$ 1880 IF Z$="Y" THEN GOTO 2080 1890 GET #1,1 1900 Q=VAL(T0$)+1 1910 M=VAL(AD$) 1920 FOR J=2 TO Q 1930 GET #1,J 1940 IF FL$="W" THEN 2060 1950 L=VAL(T0$)/M 1960 IF L>=.9 THEN 2010 1970 IF L>=.8 THEN 2020 1980 IF L>=.7 THEN 2030 1990 IF L>=.6 THEN 2040 2000 LSET LG$="E":GOTO 2050 2010 LSET LG$="A":GOTO 2050 2020 LSET LG$="B":GOTO 2050 2030 LSET LG$="C":GOTO 2050 2040 LSET LG$="D" 2050 PUT #1,J 2060 NEXT J 2070 GOTO 2440 2080 ON ERROR GOTO 2100 2090 OPEN "R",#1,Z$ 2100 GET #1,1 2110 Q=VAL(NU$)+1 2120 M=VAL(AD$) 2130 S=VAL(T0$) 2140 FOR J=2 TO Q 2150 GET #1,J 2160 IF FL$="W" THEN 2190 2170 T3=T3+VAL(T0$) 2180 T4=T4+VAL(T0$)^2 2190 NEXT J 2200 A=T3/S 2210 PRINT "AVERAGE TOTAL SCORE IS: ";A 2220 T3=T3^2 2230 ON ERROR GOTO 2250 2240 D=SQR((T4-(T3/S))/S) 2250 PRINT "STANDARD DEVIATION OF ALL TESTS IS: ";D 2260 PRINT "" 2270 Q$=INKEY$ 2280 IF Q$="" THEN 2270 2290 FOR J=2 TO Q 2300 GET #1,J 2310 IF FL$="W" THEN 2430 2320 E=VAL(T0$) 2330 IF E>=(A+(3*D)) THEN 2380 2340 IF E>=(A+(2*D)) THEN 2390 2350 IF E>=A-D THEN 2400 2360 IF E>=(A-(2*D)) THEN 2410 2370 LSET LG$="E": GOTO 2420 2380 LSET LG$="A": GOTO 2420 2390 LSET LG$="B": GOTO 2420 2400 LSET LG$="C": GOTO 2420 2410 LSET LG$="D" 2420 PUT #1,J 2430 NEXT J 2440 GOTO 320 2450 GOSUB 3010 2460 INPUT "DO YOU WANT A HARD COPY OF THE LIST? (Y OR N)";Z$ 2470 IF Z$="Y" THEN GOTO 2730 2480 GET #1,1 2490 GOSUB 3010 2500 PRINT,DATE$,"CLASS LIST FOR ";Z1$ 2510 PRINT 2520 PRINT,"NUMBER OF TESTS GIVEN: ";NA$ 2530 PRINT,"MAXIMUM POSSIBLE SCORE: ";AD$ 2540 PRINT,"ORIGINAL NUMBER OF STUDENTS IN CLASS: ";NU$ 2550 PRINT,"PRESENT NUMBER OF STUDENTS IN CLASS: ";T0$ 2560 PRINT,"MAXIMUM INDIVIDUAL TEST GRADES ARE: ";T1$ 2570 Q=VAL(NU$)+1 2580 FOR J=2 TO Q 2590 GET #1,J 2600 PRINT 2610 PRINT,"NAME: ";NA$ 2620 PRINT,"ADDRESS: ";AD$ 2630 PRINT,"STUDENT NUMBER :";NU$ 2640 PRINT,"CURRENT STATUS :";FL$ 2650 PRINT,"LETTER GRADE :";LG$ 2660 PRINT,"TOTAL POINTS : ";T0$ 2670 PRINT,"TEST SCORES: ";T1$ 2680 PRINT:PRINT 2690 FOR X=1 TO 1000:NEXT X 2700 NEXT J 2710 GOTO 320 2720 END 2730 REM ***** PRINT ROUTINE FOR FX-80 ***** 2740 LPRINT CHR$(27);"!";CHR$(8): REM *** SET UP EMPHASIZED TYPE *** 2750 LPRINT " CLASS LIST AND GRADES - ELECTRONICS" 2760 LPRINT 2770 LPRINT "===================================================================" 2780 LPRINT 2790 GET #1,1 2800 LPRINT, DATE$, "CLASS LIST FOR ";Z1$ 2810 LPRINT 2820 LPRINT,"NUMBER OF TESTS GIVEN :";NA$ 2830 LPRINT,"MAXIMUM POSSIBLE SCORE IS :";AD$ 2840 LPRINT,"ORIGINAL NUMBER OF STUDENTS :";NU$ 2850 LPRINT,"PRESENT NUMBER OF STUDENTS :";T0$ 2860 LPRINT,"MAXIMUM INDIVIDUAL TEST GRADES ARE :";T1$ 2870 LPRINT 2880 Q=VAL(NU$)+1 2890 FOR J=2 TO Q 2900 GET #1,J 2910 LPRINT,"NAME :",NA$ 2920 LPRINT,"ADDRESS :",AD$ 2930 LPRINT,"STUDENT NUMBER :";NU$ 2940 LPRINT,"STATUS :";FL$ 2950 LPRINT,"LETTER GRADE :";LG$ 2960 LPRINT,"NUMBER OF STUDENTS IN CLASS :";T0$ 2970 LPRINT,"INDIVIDUAL TEST SCORES :",T1$ 2980 LPRINT:LPRINT 2990 NEXT J 3000 GOTO 320 3010 PRINT CHR$(26):RETURN: REM CLEAR SCREEN SUBROUTINE *** 3020 END 0 LPRINT:LPRINT 299 CHR$(27);"!";CHR$(8): REM *** SET UP EMPHASIZED TYPE *** 2750 LPRINT " CLASS LIST AND GRADES - ELECTRONICS" 2760 LPRINT 2770 LPRINT "===================================================================" 2780 LPRINT 2790 GET #1,1 2800 LPRINT, DATE$, "CLASS LIST FOR ";Z1$ 2810 LPRINT 2820 LPRINT,"NUMBER OF TESTS GIVEN :";NA$ 2830 LPRINT,"MAXIMUM POSSIBLE SCORE IS :";AD$ 2840 LPRINT,"ORIGINAL NUMBER OF STUDENTS :";NU$ 2850 LPRINT,"PRESENT NUMBER OF STUDENTS :";T0$ 2860 LPRINT,"MAXIMUM INDIVIDUAL TEST GRADES ARE :";T1$ 2870 LPRINT 2880 Q=VAL(NU$)+1 2890 FOR J=2 TO Q 2900 GET #1,J 2910 LPRINT,"NAME :",NA$ 2920 LPRINT,"ADDRESS :",AD$ 2930 LPRINT,"STUDENT NUMBER :";NU$ 2940 LPRINT,"STATUS :";FL$ 2950 LPRINT,"LETTER GR1 ' note * This program was generated on a trs-80 by Jim Gerritz 2 ' a good friend so I left it in and just revised, to run on an 3 ' Osborne1...Run using Mbasic as is, or reedit to shorten by 4 ' removing lines that begin with a ('). These lines are needed 5 ' to run on the trs-80 model computers, and one should delete the 6 ' Osborne section (Those lines followed with (' * &or comment)). 7 ' Also trs-80 users should replace the "PRINT CHR$(26)" a clear 8 ' screen command for osborne with CLS wherever found in program. 9 ' So this is basically two working programs in one. Sorry about 10 ' the *k size if you downloaded longdistants but surely you have 11 ' a friend out there that didn't go with the best system i.e. OZZY 12 ' Mainly clean-up to fit osborne screen and to set the numbers to 13 ' appear in the middle (watch close). 14 ' Osborne1 revisions by Steve Ekwall / Denver Co 303-979-3199. 15 ' LAST MINUTE UPDATE TO ACHIEVE TRUE RANDOM NUMBERS, INSERT @ 16 ' BEGINNING OF FILE (sorry didn't have time before transmission) 17 ' 10 PRINT" HIT ANY KEY TO START" 18 ' 20 IF INKEY$="" THEN SEED=SEED+1:GOTO 20 19 ' 30 SEED=SEED-32767*(INT(SEED/32767)) 20 ' 40 RANDOMIZE SEED 21 ' 50 PRINT INT(RND*10) 22 ' 23 ' INSERT this 10-50 in program at the begining somewhere and 24 ' It'll run better as well as not giving you the same #'s if 25 ' you ^c and "RUN" again. 26 ' SE/8:83 100 PRINT CHR$(26):POKE 16553,255 200 PRINT:PRINT " REPEAT AFTER ME . . . . " 300 ' BY JIM GERRITZ 398 W. POWERS AVE LITTLETON, CO 80120 400 DIM A$(100), B$(100) 500 PRINT:PRINT:PRINT "WOULD YOU LIKE INSTRUCTIONS";:INPUT I$ 600 ' IF LEFT$(I$,1)="Y" THEN 3500 700 IF LEFT$(I$,1)="Y" OR LEFT$(I$,1)="y" THEN 4000 ' * for upper/lower case 800 T=0 900 PRINT CHR$(26) ' * clean up screen .. restart! 1000 PRINT "HOW DO YOU RATE YOURSELF?" 1100 ' PRINT "NOVICE (ENTER 1)":PRINT "PRO (ENTER 2)":PRINT "SUPER PRO (ENTER 3)": PRINT "WORLD CHAMPION (ENTER 4)" 1200 PRINT "1> NOVICE":PRINT "2> PRO":PRINT "3> SUPER*PRO":PRINT "4> *WORLD CHAMPION*" ' * faster go again screen 1300 INPUT R 1400 GOSUB 7100 1500 ' RANDOM 1600 RANDOMIZE X ' * 1700 FOR X= 1 TO 100 1800 ' S=RND(9) 1900 S=RND*10 ' * 2000 FOR D=1 TO S: READ A$(X): NEXT D 2100 RESTORE 2200 NEXT X 2300 DATA "1","2","3","4","5","6","7","8","9" 2400 T=1 2500 FOR X=1 TO T 2600 ' PRINT@412, A$(X) 2610 DEF FNC$(X,Y)=CHR$(27)+"="+CHR$(Y+32)+CHR$(X+32) ' * center screen cursor 2630 PRINT FNC$(12,12),A$(X) ' * X,Y FOR CURSOR 2700 FOR B= 1 TO 200: NEXT B 2800 PRINT CHR$(26) 2900 FOR D=1 TO 100: NEXT D 3000 NEXT X 3100 FOR X=1 TO T 3200 B$(X)= INKEY$ 3300 IF B$(X)="" THEN 3200 3400 IF B$(X)<>A$(X) THEN 7700 3500 NEXT X 3600 T=T+1 3700 IF T1=T THEN 8600 3800 FOR D=1 TO 500: NEXT D 3900 GOTO 2500 4000 ' PRINT CHR$(26): PRINT:PRINT " I WILL DISPLAY A SERIES OF NUMBERS ONE AT A TIME ON THE" 4100 ' PRINT "MONITOR. YOU MUST REPEAT THE SEQUENCE. THE NUMBERS WILL NOT" 4200 ' PRINT "BE DISPLAYED AS YOU ENTER THEM. EACH TIME YOU SUCCESSFULLY" 4300 ' PRINT "COMPLETU A SEQUENCE, I WILL ADD ANOTHER NUMBER TO THE SAME" 4400 ' PRINT "SEQUENCE. GOOD LUCK!" 4500 ' PRINT:PRINT "BELOW ARE LISTED THE LENGTHS OF EACH SEQUENCE" 4600 ' PRINT "BY THE WAY, IT IS NOT FAIR TO WRITE THE NUMBERS DOWN AS THuY" 4700 ' PRINT "ARE PRESENTED." 4800 ' PRINT "NOVICE=10 4900 ' PRINT "PRO=25 5000 ' PRINT "SUPER PRO=50 5100 ' PRINT "WORLD CHAMPION=100 5200 PRINT CHR$(26) ' * LINES 4610-4700 TO FIT 52" SCREEN ON OSBORNE 5300 PRINT " I will diplay a series of NUMBERS one at a time" 5400 PRINT "on the monitor. YOU MUST REPEAT THE SEQUENCE!" 5500 PRINT "The Numbers will NOT be displayed as you Enter them." 5600 PRINT "Each Time You Successfully Complete a Sequence...." 5700 PRINT "I WILL ADD ANOTHER NUMBER TO THE SAME SEQUENCE." 5800 PRINT " GOOD LUCK!" 5801 PRINT " Hint <> 0" 5810 PRINT 5900 PRINT:PRINT"BELOW are listed the lengths of each sequence." 6000 PRINT " By the Way..It's Not Fair to write the numbers " 6100 PRINT " down as they are presented. Think in double/triple" 6110 PRINT "number sets as a suggestion. GO FOR IT !" 6200 PRINT:PRINT 6300 PRINT " 10 = NOVICE" 6400 PRINT " 25 = PRO" 6500 PRINT " 50 = SUPER*PRO" 6600 PRINT " 100 = * WORLD CHAMPION * 6700 PRINT:PRINT:PRINT 6800 PRINT "HIT ANY KEY TO CONTINUE Osborne1" 6900 Z$=INKEY$: IF Z$="" THEN 6900 7000 PRINT CHR$(26): GOTO 800 7100 IF R=1 THEN T1=10 7200 IF R=2 THEN T1=25 7300 IF R=3 THEN T1=50 7400 IF R=4 THEN T1=100 7500 PRINT CHR$(26) 7600 RETURN 7700 PRINT CHR$(7) 7710 PRINT:PRINT:PRINT "YOU MISSED!" 7800 PRINT "YOU ENTERED "; B$(X);" AND THE NUMBER WAS "; A$(X) 7900 PRINT "THIS IS THE ENTIRE SEQUENCE" 8000 FOR X=1 TO T1:PRINT A$(X);: NEXT X 8100 PRINT:PRINT "DO YOU WANT ANOTHER GAME";: INPUT I$ 8200 ' IF LEFT$(I$,1)= "Y" THEN 700 8300 IF LEFT$(I$,1)="Y" OR LEFT$(I$,1)="y" THEN 800 ' * catches upper/lower 8400 PRINT "HOPE YOU DIDN'T GO TOO CRAZY!! BYE" 8500 PRINT "type 'RUN' to Restart ok?":END ' * 8600 PRINT CHR$(26):PRINT:PRINT "YOU MADE IT!!! WANT ANOTHER GAME";:INPUT I$ 8700 ' IF LEFT$(I$,1)="Y" THEN 700 8800 IF LEFT$(I$,1)="Y" OR LEFT$(I$,1)="y" THEN 800 ' * catches upper/lower 8900 GOTO 8400 00 ' IF LE 100 = * WORLD CHAMPION * 6700 PRINT:PRINT:PRINT 6800 PRINT "HIT ANY KEY TO CONTINUE Osborne1" 6900 Z$=INKEY$: IF Z$="" THEN 6900 7000 PRINT CHR$(26): GOTO 800 7100 IF R=1 THEN T1=10 7200 IF R=2 THEN T1=25 7300 IF R=3 THEN T1=50 7400 IF R=4 THEN T1=100 7500 PRINT CHR$(26) 7600 RETURN 7700 PRINT CHR$(7) 7710 PRINT:PRINT:PRINT "YOU MISSED!" 7800 PRINT "YOU ENTERED "; B$(X);" AND THE NUMBER WAS "; A$(X) 7900 PRINT "THIS IS THE ENTIRE SEQUENCE" 8000 FOR X=1 TO T1:PRINT A$(X);: NEXT X 8100 PRINT:PRINT "DO YOU WANT ANOTHER GAME";: INPUT I$ 8200 ' IF LEFT$(I$,1)= "Y" THEN 700 8300 IF LEFT10 PRINT CHR$(26) 11 REM TYPEFAST: A TUTORIAL TYPING PROGRAM 13 REM BY CHARLES UNGERLEIDER 14 REM 1363 FOUNTAIN WAY 15 REM VANCOUVER, BRITISH COLUMBIA 16 REM CANADA V6H 3T2 17 REM (604) 734-9250 20 GOSUB 1520 30 REM LIST OF VARIABLES 40 REM T$ IS THE STRING OF CHARACTER SETS 50 REM DL IS A DELAY SET BY THE PERSON TO CONTROL THE SPEED OF THE DISPLAY 60 REM MEM IS A COUNTER USED IN THE TIME CALCULATION 70 REM TIME IS A COUNTER USED TO INDICATE ELAPSED TIME FOR THE DRILL 80 REM I IS USED TO PLACE THE DISPLAY AT THE RIGHT OF THE SCREEN 90 REM C IS THE NUMBER OF STRINGS OF CHARACTERS IN THE DRILL 100 REM SL IS THE STRING LENGTH, THE NUMBER OF CHARACTERS IN EACH STRING, INCLUDING TRAILING BLANKS TO CLEAN THINGS UP 110 REM H IS THE NUMBER OF LETTERS WHICH WERE 'HIT' CORRECTLY 120 REM CT IS THE TOTAL CHARACTERS USED IN THE LESSON  AFTER THE TRALING BLANKS ARE REMOVED 130 PRINT CHR$(26) 140 PRINT:PRINT:PRINT:PRINT:PRINT " PRESS ANY KEY TO CONTINUE" 150 IF INKEY$=""THEN SEED=SEED+1:GOTO 150 160 SEED=SEED-32767*(INT(SEED/32767)) 170 RANDOMIZE SEED 180 DIM T$(3) 190 GOTO 1110 200 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT:PRINT:PRINT 210 PRINT "CONTROL THE SPEED OF YOUR TYPING PRACTICE":PRINT 220 PRINT " SELECT THE SPEED OF YOUR CHOICE:":PRINT 230 PRINT " SLOWEST SPEED = 5":PRINT 240 PRINT " FASTEST SPEED = 1":PRINT 250 INPUT "WHAT SPEED DO YOU PICK";DL 260 IF DL>5 THEN DL=5 270 MEM=0:CH$=CHR$(27) 280 TIME=MEM 290 PRINT CHR$(26) 300 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT 310 FOR I= 60 - (SL+2) TO 0 STEP -1 320 FOR D=1 TO DL 330 IF I > 50 THEN TIME=0 ELSE TIME = TIME+.128 340 PRINT CH$"="CHR$(32)+CHR$(65) TIME "SECONDS" 350 PRINT:PRINT:PRINT:PRINT:PRINT 360 PRINT SPC(I);T$(3);CHR$(10) 370 PRINT SPC(I);T$(2);CHR$(10) 380 PRINT SPC(I);T$(1);CHR$(10) 390 PRINT CHR$(11) CHR$(11) CHR$(11) CHR$(11) CHR$(11) CHR$(11); 400 A$=INKEY$:IF A$= "" THEN 450 410 IF A$ <> LEFT$(T$(C),1) THEN 450 420 T$(C)=RIGHT$(T$(C),(SL-1))+" ":H=H+1 430 IF ASC(T$(C)) = 32 THEN C=C-1 440 IF C=0 THEN 470 450 NEXT D 460 NEXT I 470 PRINT CHR$(26) 480 PRINT CH$"="CHR$(32)+CHR$(32)" TIME AT THE END OF THIS DRILL WAS>" TIME "SECONDS" 490 PRINT:PRINT 500 PRINT " YOU TYPED";H;"LETTERS CORRECTLY":PRINT 510 PRINT "YOUR SCORE ON THIS TRIAL WAS"; INT((H/CT)*100); "PERCENT" 520 PRINT:PRINT 530 PRINT "DO YOU WANT TO:":PRINT 540 PRINT " (R)EPEAT" 550 PRINT " (A)DVANCE ONE LEVEL?" 560 PRINT " SEE THE (M)ENU?" 570 PRINT " (E)ND THE SESSION?" 580 PRINT:INPUT "PRESS (R),(A),(M) OR (E) AND ",QQ$ 590 IF QQ$ = "R" THEN 1350 600 IF QQ$ = "r" THEN 1350 610 IF QQ$ = "A" THEN BN=BN+1:GOTO 1350 620 IF QQ$="a" THEN BN=BN+1:GOTO 1350 630 IF QQ$="M" THEN 1110 640 IF QQ$="m" THEN 1110 650 IF QQ$="E" THEN 1470 660 IF QQ$="e" THEN 1470 670 REM LESSON ONE 680 C=3:SL=5:H=0:CT=(C*(SL-1)) 690 T$(1)="JFDK " 700 T$(2)="SALK " 710 T$(3)="DKLA " 720 GOTO 200 730 REM LESSON TWO 740 C=3:SL=5:H=0:CT=(C*(SL-1)) 750 T$(1)="GH;H " 760 T$(2)=";HG; " 770 T$(3)="HG;H " 780 GOTO 200 790 C=3:SL=8:H=0:CT=(C*(SL-1)): T$(1)="HAL;DLK ": T$(2)="SLA;JAK ": T$(3)="GH;FSGH ": GOTO 200 800 REM LESSON THREE 810 C=3:SL=5:H=0:CT=(C*(SL-1)): T$(1)="RUTY ": T$(2)="TUYR ": T$(3)="YUTR ": GOTO 200 820 C=3:SL=10:H=0:CT=(C*(SL-1)): T$(1)="TYRDKRUGH ": T$(2)="SLGHUTRY; ": T$(3)="DALY;TRYU ": GOTO 200 830 REM LESSON FOUR 840 C=3:SL=5:H=0:CT=(C*(SL-1)): T$(1)="WEIO ": T$(2)="OIWE ": T$(3)="IWEO ": GOTO 200 850 C=3:SL=10:H=0:CT=(C*(SL-1)): T$(1)="WASTEWALK ": T$(2)="RIGHTWEST ": T$(3)="DAILYTOYS ": GOTO 200 860 REM LESSON FIVE 870 C=3:SL=5:H=0:CT=(C*(SL-1)): T$(1)="QUIP ": T$(2)="PQGH ": T$(3)="QPRQ ": GOTO 200 880 C=3:SL=12:H=0:CT=(C*(SL-1)): T$(1)="QUITE;TOUGH ": T$(2)="SQUIRETYPER ": T$(3)="QUIET;QUAFF ": GOTO 200 890 REM LESSON SIX 900 C=3:SL=5:H=0:CT=(C*(SL-1)): T$(1)="VBMN ": T$(2)="BNVM ": T$(3)="MBVN ": GOTO 200 910 C=3:SL=13:H=0:CT=(C*(SL-1)): T$(1)="RUBBER;BANDS ": T$(2)="TOONUMBTUBAS ": T$(3)="BUBBLE;MOONS ": GOTO 200 920 REM LESSON SEVEN 930 C=3:SL=5:H=0:CT=(C*(SL-1)): T$(1)="CXZ. ": T$(2)=".XCZ ": T$(3)="Z.XC ": GOTO 200 940 C=3:SL=15:H=0:CT=(C*(SL-1)): T$(1)="JAZZ;BAND;TAX. ": T$(2)="CATS.PURR;NOW. ": T$(3)="ZOTS;CITY;AXE; ": GOTO 200 950 REM LESSON EIGHT 960 C=3:SL=5:H=0:CT=(C*(SL-1)): T$(1)="2965 ": T$(2)="0871 ": T$(3)="4302 ": GOTO 200 970 C=3:SL=11:H=0:CT=(C*(SL-1)): T$(1)="1029.34.50 ": T$(2)="45904.28.1 ": T$(3)="659.452.02 ": GOTO 200 980 REM LESSON NINE 990 C=3:SL=5:H=0:CT=(C*(SL-1)) 1000 FOR P=C TO 1 STEP -1 1010 T$(P)="" 1020 FOR J= 1 TO SL-1 1030 IF INT(RND*2) = 1 THEN 1060 1040 T$(P)=T$(P)+CHR$(INT(65+RND*25)) 1050 GOTO 1070 1060 T$(P)=T$(P)+CHR$(INT(97+RND*25)) 1070 NEXT J 1080 T$(P)=T$(P)+" " 1090 NEXT P 1100 GOTO 200 1110 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT "TYPING TEACHER'S MENU:":PRINT 1120 PRINT CHR$(26) 1130 PRINT "SUZIE'S TYPING MENU:":PRINT 1140 PRINT " LESSON 1-J,F,D,K,L,A,S":PRINT 1150 PRINT " LESSON 2-G,H,;":PRINT 1160 PRINT " LESSON 3-R,U,T,Y":PRINT 1170 PRINT " LESSON 4-W,E,I,O":PRINT 1180 PRINT " LESSON 5-Q,P,":PRINT 1190 PRINT " LESSON 6-V,B,N,M":PRINT 1200 PRINT " LESSON 7-C,X,Z,.":PRINT 1210 PRINT " LESSON 8-NUMBERS 1 TO 0":PRINT 1220 PRINT " LESSON 9-UPPER & lower Case":PRINT 1230 PRINT " PRESS THE NUMBER OF YOUR CHOICE & ":PRINT 1240 INPUT "WHAT LESSON NUMBER WOULD YOU LIKE";XX 1250 BN=XX 1260 IF BN=1 GOTO 670 1270 IF BN=2 GOTO 730 1280 IF XX=3 THEN BN=4: GOTO 800 1290 IF XX=4 THEN BN=6: GOTO 830 1300 IF XX=5 THEN BN=8: GOTO 860 1310 IF XX=6 THEN BN=10: GOTO 890 1320 IF XX=7 THEN BN=12: GOTO 920 1330 IF XX=8 THEN BN=14: GOTO 950 1340 IF XX=9 THEN BN=16: GOTO 980 1350 IF BN=>17 THEN 1370 1360 ON BN GOTO 670,730,790,800,820,830,850, 860,880,890,910,920,940,950,970,980 1370 PRINT CHR$(26):PRINT "YOU HAVE COMPLETED ALL OF THE DRILLS." 1380 PRINT:PRINT"DO YOU WANT TO TRY THE ADVANCED DRILL AGAIN" 1390 PRINT:PRINT"OR DO YOU WANT TO STOP FOR NOW?" 1400 PRINT:PRINT " TRY THE ADVANCED DRILL AGAIN (M) 1410 PRINT:PRINT " STOP FOR NOW (S) 1420 PRINT:INPUT"PRESS (M) OR (S) AND PRESS ",LL$ 1430 IF LL$="M" THEN 980 1440 IF LL$="m" THEN 980 1450 IF LL$="S" THEN 1470 1460 IF LL$="s" THEN 1470 1470 PRINT CHR$(26) 1480 PRINT "FREQUENT SHORT PRACTICE SESSIONS BUILD SPEED." 1490 PRINT:PRINT"TRY AGAIN SOON, KEEPING TRACK OF THE PROGRESS" 1500 PRINT: PRINT"YOU ARE MAKING." 1510 END 1520 PRINT CHR$(26) 1530 WHILE A<>32:Z1=Z:READ Z,A:Z=Z1+Z:POKE Z+61440!,A:WEND 1540 DATA 0,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1550 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1560 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1570 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1580 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,80,22,126,22,2,22,3,22 1590 DATA 4,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1600 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1610 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1620 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,78,22,2,22 1630 DATA 3,22,4,22,119,22,2,22,3,22,1,22,1,22,1,22,1,22,3,22,1,22 1640 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1650 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1660 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1670 DATA 1,22,1,22,1,22,1,22,78,22,2,22,5,22,5,22,3,22,113,22,2,22 1680 DATA 5,22,5,22,1,22,1,22,1,22,3,22,1,22,1,22,1,22,1,22,1,22 1690 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1700 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1710 DATA 1,22,1,22,1,22,1,22,1,22,78,22,7,22,5,22,6,22,110,22,7,22 1720 DATA 5,22,6,22,1,22,1,22,3,22,1,22,1,22,1,22,1,22,1,22,1,22 1730 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1740 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,78,22 1750 DATA 12,22,6,22,5,22,105,22,12,22,6,22,5,22,1,22,1,22,3,22,1,22 1760 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1770 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,78,22 1780 DATA 18,22,5,22,5,22,3,22,97,22,18,22,1,22,1,22,3,22,5,22,1,22 1790 DATA 1,22,1,22,3,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1800 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,78,22,23,22,5,22 1810 DATA 3,22,3,22,94,22,23,22,5,22,3,22,3,22,1,22,1,22,3,22,1,22 1820 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,78,22 1830 DATA 28,22,3,22,5,22,5,22,87,22,28,22,3,22,5,22,5,22,9,22,78,22 1840 DATA 36,22,5,22,9,22,78,22,34,22,1,22,1,22,5,22,9,22,78,22,41,22 1850 DATA 9,22,78,22,41,22,9,22,78,22,50,22,78,22,1,22,1,22,1,22 1860 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1870 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1880 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1890 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22 1900 DATA 1,22,1,22,1,22,32,32 1910 FOR DELAY=1 TO 550:NEXT DELAY 1920 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT " PRESS TO CONTINUE" 1930 PRINT:INPUT " AFTER READING EACH SCREEN",DUM$ 1940 PRINT CHR$(26):PRINT CHR$(27)+"S"+CHR$(32)+CHR$(32) 1950 WHILE B<>32:Q1=Q:READ Q,B:Q=Q1+Q:POKE Q+61440!,B:WEND 1960 DATA 0,84,1,89,1,80,1,69,1,70,1,65,1,83,1,84,2,105,1,115,2,97 1970 DATA 1,110,2,105,1,110,1,116,1,114,1,111,1,100,1,117,1,99,1,116 1980 DATA 1,111,1,114,1,121,2,116,1,121,1,112,1,105,1,110,1,103,2,112 1990 DATA 1,114,1,111,1,103,1,114,1,97,1,109,1,46,2,73,1,116,2,119 2000 DATA 1,97,1,115,207,105,1,110,1,115,1,112,1,105,1,114,1,101,1,100 2010 DATA 2,98,1,121,2,109,1,121,2,100,1,97,1,117,1,103,1,104,1,116 2020 DATA 1,101,1,114,1,44,2,83,1,117,1,122,1,97,1,110,1,110,1,101 2030 DATA 1,44,2,97,1,110,1,100,2,111,1,114,1,105,1,103,1,105,1,110 2040 DATA 1,97,1,108,1,108,1,121,209,99,1,97,1,108,1,108,1,101,1,100 2050 DATA 2,83,1,85,1,90,1,73,1,69,1,39,1,83,2,84,1,89,1,80,1,73 2060 DATA 1,78,1,71,2,84,1,69,1,65,1,67,1,72,1,69,1,82,1,46,3,73 2070 DATA 1,110,1,99,1,108,1,117,1,115,1,105,1,111,1,110,2,105,1,110 2080 DATA 2,116,1,104,1,101,209,108,1,105,1,98,1,114,1,97,1,114,1,121 2090 DATA 2,104,1,97,1,115,2,110,1,101,1,99,1,101,1,115,1,115,1,105 2100 DATA 1,116,1,97,1,116,1,101,1,100,2,116,1,104,1,101,2,99,1,104 2110 DATA 1,97,1,110,1,103,1,101,2,105,1,110,2,116,1,105,1,116,1,108 2120 DATA 1,101,1,46,340,83,1,117,1,122,1,105,1,101,2,100,1,101,1,115 2130 DATA 1,101,1,114,1,118,1,101,1,115,2,99,1,114,1,101,1,100,1,105 2140 DATA 1,116,2,102,1,111,1,114,2,98,1,111,1,116,1,104,2,116,1,104 2150 DATA 1,101,2,105,1,110,1,115,1,112,1,105,1,114,1,97,1,116,1,105 2160 DATA 1,111,1,110,2,102,1,111,1,114,207,112,1,114,1,111,1,103 2170 DATA 1,114,1,97,1,109,2,97,1,110,1,100,2,104,1,101,1,114,2,112 2180 DATA 1,97,1,116,1,105,1,101,1,110,1,99,1,101,2,105,1,110,2,97 2190 DATA 1,119,1,97,1,105,1,116,1,105,1,110,1,103,2,105,1,116,1,115 2200 DATA 2,100,1,101,1,118,1,101,1,108,1,111,1,112,1,45,208,109,1,101 2210 DATA 1,110,1,116,1,46,3,72,1,101,1,114,2,97,1,99,1,99,1,101,1,115 2220 DATA 1,115,2,116,1,111,2,116,1,104,1,101,2,79,1,115,1,98,1,111 2230 DATA 1,114,1,110,1,101,2,119,1,97,1,115,2,114,1,101,1,115,1,116 2240 DATA 1,114,1,105,1,99,1,116,1,101,1,100,210,100,1,117,1,114,1,105 2250 DATA 1,110,1,103,2,116,1,104,1,101,2,100,1,101,1,118,1,101,1,108 2260 DATA 1,111,1,112,1,109,1,101,1,110,1,116,2,112,1,101,1,114,1,105 2270 DATA 1,111,1,100,1,33,32,32 2280 Y$=INPUT$(1) 2290 RESTORE 2320 2300 PRINT CHR$(26) 2310 WHILE C<>32:V1=V:READ V,C:V=V1+V:POKE V+61440!,C:WEND 2320 DATA 0,65,2,114,1,101,1,118,1,105,1,115,1,101,1,100,2,118,1,101 2330 DATA 1,114,1,115,1,105,1,111,1,110, 2,111,1,102,2,84,1,89,1,80 2340 DATA 1,69,1,70,1,65,1,83,1,84,2,105,1,115,2,97,1,108,1,114,1,101 2350 DATA 1,97,1,100,1,121,2,117,1,110,1,100,1,101,1,114,1,119,1,97 2360 DATA 1,121,1,46,207,73,1,116,2,119,1,105,1,108,1,108,2,109,1,97 2370 DATA 1,107,1,101,2,117,1,115,1,101,2,111,1,102,2,116,1,104,1,101 2380 DATA 2,79,1,115,1,98,1,111,1,114,1,110,1,101,1,39,1,115,2,103 2390 DATA 1,114,1,97,1,112,1,104,1,105,1,99,1,115,2,116,1,111,2,115 2400 DATA 1,104,1,111,1,119,207,116,1,104,1,101,2,112,1,114,1,111 2410 DATA 1,112,1,101,1,114,2,102,1,105,1,110,1,103,1,101,1,114,2,112 2420 DATA 1,111,1,115,1,105,1,116,1,105,1,111,1,110,1,115,1,46,3,85 2430 DATA 1,110,1,116,1,105,1,108,2,116,1,104,1,97,1,116,2,118,1,101 2440 DATA 1,114,1,115,1,105,1,111,1,110,2,105,1,115,206,112,1,101 2450 DATA 1,114,1,102,1,101,1,99,1,116,1,101,1,100,1,44,2,117,1,115 2460 DATA 1,101,1,114,1,115,2,115,1,104,1,111,1,117,1,108,1,100,2,111 2470 DATA 1,98,1,116,1,97,1,105,1,110,2,97,2,99,1,111,1,112,1,121 2480 DATA 2,111,1,102,2,97,2,115,1,116,1,97,1,110,1,100,1,97,1,114 2490 DATA 1,100,206,116,1,121,1,112,1,105,1,110,1,103,2,116,1,101 2500 DATA 1,120,1,116,1,98,1,111,1,111,1,107,2,102,1,114,1,111,1,109 2510 DATA 2,116,1,104,1,101,1,105,1,114,2,108,1,111,1,99,1,97,1,108 2520 DATA 2,112,1,117,1,98,1,108,1,105,1,99,2,108,1,105,1,98,1,114 2530 DATA 1,97,1,114,1,105,1,101,1,115,1,46,207,84,1,104,1,101,2,116 2540 DATA 1,101,1,120,1,116,2,119,1,105,1,108,1,108,2,105,1,108,1,108 2550 DATA 1,117,1,115,1,116,1,114,1,97,1,116,1,101,2,116,1,104,1,101 2560 DATA 2,112,1,114,1,111,1,112,1,101,1,114,2,112,1,111,1,115,1,105 2570 DATA 1,116,1,105,1,111,1,110,1,115,2,102,1,111,1,114,208,115,1,116 2580 DATA 1,114,1,105,1,107,1,105,1,110,1,103,2,101,1,97,1,99,1,104 2590 DATA 2,111,1,102,2,116,1,104,1,101,2,108,1,101,1,116,1,116,1,101 2600 DATA 1,114,1,115,1,46,356,67,1,97,1,114,1,101,1,102,1,117,1,108 2610 DATA 2,117,1,115,1,101,1,114,1,115,2,119,1,105,1,108,1,108,2,110 2620 DATA 1,111,1,116,1,105,1,99,1,101,2,116,1,104,1,97,1,116,2,97 2630 DATA 1,102,1,116,1,101,1,114,2,101,1,97,1,99,1,104,2,111,1,102 2640 DATA 2,116,1,104,1,101,209,108,1,101,1,115,1,115,1,111,1,110 2650 DATA 1,115,2,116,1,104,1,101,1,114,1,101,2,105,1,115,2,97,1,110 2660 DATA 2,105,1,110,1,116,1,101,1,114,1,109,1,101,1,100,1,105,1,97 2670 DATA 1,116,1,101,2,112,1,114,1,97,1,99,1,116,1,105,1,99,1,101 2680 DATA 2,100,1,114,1,105,1,108,1,108,1,46,209,84,1,104,1,101,1,115 2690 DATA 1,101,2,105,1,110,1,116,1,101,1,114,1,109,1,101,1,100,1,105 2700 DATA 1,97,1,116,1,101,2,100,1,114,1,105,1,108,1,108,1,115,2,99 2710 DATA 1,97,1,110,2,98,1,101,2,101,1,110,1,116,1,101,1,114,1,101 2720 DATA 1,100,2,117,1,115,1,105,1,110,1,103,2,116,1,104,1,101,207,97 2730 DATA 1,100,1,118,1,97,1,110,1,99,1,101,2,99,1,111,1,109,1,109 2740 DATA 1,97,1,110,1,100,2,111,1,110,2,116,1,104,1,101,2,104,1,101 2750 DATA 1,108,1,112,2,109,1,101,1,110,1,117,1,46,32,32 2760 RESTORE 2800 2770 Y$=INPUT$(1) 2780 PRINT CHR$(26) 2790 WHILE D<>32:P1=P:READ P,D:P=P1+P:POKE P+61440!,D:WEND 2800 DATA 0,73,2,97,1,109,2,104,1,111,1,112,1,101,1,102,1,117,1,108 2810 DATA 2,116,1,104,1,97,1,116,2,111,1,116,1,104,1,101,1,114,1,115 2820 DATA 2,119,1,105,1,108,1,108,2,105,1,109,1,112,1,114,1,111,1,118 2830 DATA 1,101,2,84,1,89,1,80,1,69,1,70,1,65,1,83,1,84,1,46,210,73 2840 DATA 1,116,2,105,1,115,2,119,1,114,1,105,1,116,1,116,1,101,1,110 2850 DATA 2,105,1,110,2,77,1,66,1,65,1,83,1,73,1,67,2,98,1,101,1,99 2860 DATA 1,97,1,117,1,115,1,101,2,73,2,97,1,109,2,116,1,114,1,121 2870 DATA 1,105,1,110,1,103,2,116,1,111,211,109,1,97,1,115,1,116,1,101 2880 DATA 1,114,2,116,1,104,1,97,1,116,2,108,1,97,1,110,1,103,1,117 2890 DATA 1,97,1,103,1,101,2,98,1,101,1,102,1,111,1,114,1,101,2,73 2900 DATA 2,97,1,116,1,116,1,101,1,109,1,112,1,116,2,116,1,111,2,100 2910 DATA 1,101,1,118,1,101,1,108,1,111,1,112,209,109,1,111,1,114 2920 DATA 1,101,2,115,1,111,1,112,1,104,1,105,1,115,1,116,1,105,1,99 2930 DATA 1,97,1,116,1,101,1,100,2,109,1,97,1,99,1,104,1,105,1,110 2940 DATA 1,101,2,108,1,97,1,110,1,103,1,117,1,97,1,103,1,101,2,112 2950 DATA 1,114,1,111,1,103,1,114,1,97,1,109,1,115,1,46,340,73,2,119 2960 DATA 1,111,1,117,1,108,1,100,2,97,1,112,1,112,1,114,1,101,1,99 2970 DATA 1,105,1,97,1,116,1,101,2,104,1,101,1,97,1,114,1,105,1,110 2980 DATA 1,103,2,102,1,114,1,111,1,109,2,111,1,116,1,104,1,101,1,114 2990 DATA 1,115,2,119,1,104,1,111,2,104,1,97,1,118,1,101,210,115,1,117 3000 DATA 1,103,1,103,1,101,1,115,1,116,1,105,1,111,1,110,1,115,2,116 3010 DATA 1,111,2,109,1,97,1,107,1,101,1,46,378,67,1,104,1,97,1,114 3020 DATA 1,108,1,101,1,115,2,85,1,110,1,103,1,101,1,114,1,108,1,101 3030 DATA 1,105,1,100,1,101,1,114,239,49,1,51,1,54,1,51,2,70,1,111 3040 DATA 1,117,1,110,1,116,1,97,1,105,1,110,2,87,1,97,1,121,235,86 3050 DATA 1,97,1,110,1,99,1,111,1,117,1,118,1,101,1,114,1,44,2,66 3060 DATA 1,114,1,105,1,116,1,105,1,115,1,104,2,67,1,111,1,108,1,117 3070 DATA 1,109,1,98,1,105,1,97,236,67,1,65,1,78,1,65,1,68,1,65,2,86 3080 DATA 1,54,1,72,2,51,1,84,1,50,243,40,1,54,1,48,1,52,1,41,2,55 3090 DATA 1,51,1,52,1,45,1,57,1,50,1,53,1,48,32,32 3!100 Y$=INPUT$(1) 3110 RETURN 1,84,1,50,243,40,1,54,1,48,1,52,1,41,2,55 3090 DATA 1,51,1,52,1,45,1,57,1,50,1,53,1,48,32,32 301,1,99 2970 DATA 1,105,1,97,1,116,1,101,2,104,1,101,1,97,1,114,1,105,1,110 2980 DATA 1,103,2,102,1,114,1,111,1,109,2,111,1,116,1,104,1,101,1,114 2990 DATA 1,115,2,119,1,104,1,111,2,104,1,97,1,118,1,101,210,115,1,117 3000 DATA 1,103,1,103,1,101,1,115,1,116,1,105,1,111,1,110,1,115,2,116 3010 DATA 1,111,2,109,1,97,1,107,1,101,1,46,378,67,1,104,1,97,1,114 3020 DATA 1,108,1,101,1,115,2,85,1,110,1,103,1,101,1,114,1,108,1,101 3030 DATA 1,105,1,100,1,101,1,114,239,49,1,51,1,54,1,51,2,70,1,111 3040 DATA 1,117,1,110,1,116,1,97,1,105,1,110,2,87,1,97,1,121,235,86 3050 DATA 1,97,1,110,1,99,1,111,1,117,1,118,1,101,1,114,1,44,2,66 3060 DATA 1,114,1,105,1,116,1,105,1,115,1,104,2,67,1,111,1,108,1,117 3070 DATA 1,109,1,98,1,105,1,97,236,67,1,65,1,78,1,65,1,68,1,65,2,86 3080 DATA 1,54,1,72,2,51,1,84,1,50,243,40,1,54,1,48,1,52,1,41,2,55 3090 DATA 1,51,1,52,1,45,1,57,1,50,1,53,1,48,32,32 310 REM TYPING DRILL 11 REM C$ = CHARACTER TEST STRING 12 REM WL = WORD LENGTH FOR PRACTICE 13 REM NT = NUMBER OF TRIALS 14 REM NP = NUMBER POSSIBLE 16 REM NR = NUMBER RIGHT 20 REM 23-8-83 30 REM 40 CLEAR 200 50 INPUT "WHAT CHARACTERS DO YOU WANT ?";C$ 60 L=LEN(C$):DIM A(L) 70 INPUT "HOW MANY LETTERS IN EACH WORD ?"; WL 80 INPUT "DO YOU WANT ECHO ?";A$ 90 IF LEFT$(A$,1)="Y" THEN E=1 100 INPUT "HOW MANY TRIALS ?";NT 110 FOR T=1 TO NT 120 NP=NP+WL 130 A$="" 140 FOR I=1 TO WL 150 R=INT(L*RND(1)+1) 160 A$=A$+MID$(C$,R,1) 170 NEXT I 180 PRINT :PRINT A$ 190 FOR I=1 TO WL 200 B$=INPUT$(1) 210 IF E=0 THEN 230 220 PRINT B$; 230 IF B$<>MID$(A$,I,1) THEN 360 240 NR=NR+1 250 NEXT 260 IF E=1 THEN PRINT 270 NEXT T 280 PRINT:PRINT "YOUR SCORE IS ";INT(100*NR/NP);"%" 290 IF NR=NR THEN 330 300 PRINT "ERRORS:":FOR I=1 TO L:IF A(I)=0 THEN 320 310 PRINT MID$(C$,I,1);A(I) 320 NEXT 330 PRINT:INPUT "TRY AGAIN ?"; A$ 340 IF LEFT$ (A$,1)="Y" THEN GOTO 110 350 END 360 FOR J=1 TO L 370 IF MID$(C$,J,1)<>MID$(A$,I,1) THEN NEXT: GOTO 390 380 A(J)=A(J)+1 390 PRINT:PRINT"ERROR ON ";MID$(A$,I,1) 400 FOR I=1 TO 300:NEXT 410 GOTO 270 A$,I,1) THEN NEXT: GOTO 390 380 A(J)=A(J)+1 390 PRINT:PRINT"ERROR ON ";MID$(A$,I,1) 400 FOR I=1 TO 300:NEXT 41";C$ 60 L=LEN(C$):DIM A(L) 70 INPUT "HOW MANY LETTERS IN EACH WORD ?"; WL 80 INPUT "DO YOU WANT ECHO ?";A$ 90 IF LEFT$(A$,1)="Y" THEN E=1 100 INPUT "HOW MANY TRIALS ?";NT 110 FOR T=1 TO NT 120 NP=NP+WL 130 A$="" 140 FOR I=1 TO WL 150 R=INT(L*RND(1)+1) 160 A$=A$+MID$(C$,R,1) 170 NEXT I 180 PRINT :PRINT A$ 190 FOR I=1 TO WL 200 B$=INPUT$(1) 210 IF E=0 THEN 230 220 PRINT B$; 230 IF B$<>MID$(A$,I,1) THEN 360 240 NR=NR+1 250 NEXT 260 IF E=1 THEN PRINT 270 NEXT T 280 PRINT:PRINT "YOUR SCORE IS ";INT(100*NR/NP);"%" 290 IF NR=NR THEN 330 300 PRINT "ERRORS:":FOR I=1 TO L:IF A(I)=0 THEN 320 310 PRINT MID$(C$,I,1);A(I) 320 NEXT 330 PRINT:INPUT "TRY AGAIN ?"; A$ 340 IF LEFT$ (A$,1)="Y" THEN GOTO 110 350 END 360 FOR J=1 TO L 370 IF MID$(CDecembe 25 1985 Documentatio fo th file MAKEMNZ2.BA an MAKEMN8B.BAS Bot program ar writte i MBASI an ar base o th progra b JI DUN tha appeare i th December 198 issu o FOGHORN. Th program ar specifi t th ZORB compute i tha th vide ra star addres o H&F70 i use i both Shoul wor wit an machin tha use vide ram Thi woul includ th VIXE an th Televide TP-1 Bot program wor wit 8 colum screens. Th progra MAKEMNZ2.BA i specificall fo thos ZORB user tha use BIO tha support Invers Vide usin CHR$(27)+"p t star an CHR$(27)+"q t end Progra wil sho column o entrie wit th Filename i invers video Sig-O i als i Invers Video. Th progra MAKEMN8B.BA i mor generic I stil use th vide ra addres o th ZORBA bu doesn' us Invers Video I show column o Filenames Bot program sho th Filename i alphabetica order Shel- Metzne sor i used Fo th ZORB compute, progra executio tim i abou 1 second fo 4 filenames. Progra require MBASI t run Wil no ru unde OBASIC. Documentatio a liste i Ji Dun versio o progra i th December 198 issu o FOGHOR i stil valid Mos o th importan comment fro tha documentatio ar incorporate int thes programs. Pleas refe an question to: Thoma S Cox Plat Sac Lowel Corporation P O Drawe 2327 Greenville S 29602 Thoma S Co Fo Membe 310 (Progra Dat 12/25/85) ================================================================ . Th progra MAKEMN8B.BA i mor generic I stil use th vide ra addres o th ZORBA bu doesn' us Invers Video I show column o Filenames Bot program sho th Filename i alphabetica order Shel- Metzne sor i u"95 DEFINT D,I-L,O,U-Z 97 DEFSTR A 100 DIRMAX=128 'MAXIMUM # OF DIRECTORY ENTRIES (EXTENDED FROM STANDARD 64) 110 PRINT CHR$(26) 'CLR SCREEN CODE OSBORNE, FOR ZORBA USE CHR$(27)+"E" 120 DIM D(8,DIRMAX),A$(DIRMAX) 130 FILES"*.BAS" 'DISPLAY ALL .BAS FILES ON SCREEN 140 OFFSET=&HF700:COLUMN=0:Y=1 'FOR OSBORNE OFFSET IS &HF000 PEEK VIDEO RAM 150 VIDEO=OFFSET+COLUMN*14 'TO GET FILE NAMES INTO ARRAY 170 IF (PEEK(VIDEO))=32 THEN 230 180 FOR X=0 TO 7 'READ FILE NAME INTO ARRAY 190 D(X,Y)=PEEK(VIDEO+X):A$(Y)=A$(Y)+CHR$(D(X,Y)) 200 NEXT X 210 Y=Y+1:COLUMN=COLUMN+1 220 GOTO 150 230 OFFSET=OFFSET+80:COLUMN=0 'IF THE FILE NAME STARTS WITH A SPACE 240 VIDEO=OFFSET+COLUMN*14 'DROP DOWN TO THE NEXT LINE 250 IF (PEEK(VIDEO))=32 THEN DIRMAX=Y-1:GOTO 270 260 GOTO 180 270 PRINT CHR$(26) 'USE APPROPRIATE CLEAR SCREEN CODE. CLEAR SCREEN 290 PRINT TAB(10);"************************************************************" 310 PRINT TAB(10);"* M E N U FOR MBASIC PROGRAMS ON THIS DISK *" 312 PRINT TAB(10);"* ORIGINAL PROGRAM BY JIM DUNN (C) 1985 12/85 FOGHORN *" 322 PRINT TAB(10);"* DIRECTORY SORT ROUTINE ADDED BY T. S. COX 12/24/85 *" 324 PRINT TAB(10);"* GENERIC 80 COLUMN VERSION WITH FIVE COLUMNS OF FILENAMES *" 330 PRINT TAB(10);"************************************************************" 340 PRINT 510 PRINT 515 GOSUB 2000:GOTO 3000 520 PRINT" ENTER NUMBER OF PROGRAM YOU WISH TO RUN, PRESS ";:INPUT C 530 G$=A$(C) 540 PRINT"LOADING ";G$ 550 RUN G$ 560 END 2000 'SHELL-METZNER SORT 2005 M=DIRMAX 2010 M=M\2:IF M=0 THEN 2080 2020 K=DIRMAX-M:J=1 2030 I=J 2040 L=I+M 2050 IF A$(I)<=A$(L) THEN J=J+1:IF J>K THEN 2010 ELSE 2030 ELSE 2060 2060 SWAP A$(I),A$(L):I=I-M:IF I>0 THEN 2040 2070 J=J+1:IF J>K THEN 2010 ELSE 2030 2080 RETURN 3000 COLY=INT(DIRMAX/5) 'PRINT 5 COLUMNS WIDE (FOR 80 COLUMN SCREEN) 3360 IF DIRMAX/5>COLY THEN COLY=COLY+1 3370 FOR Y=1 TO COLY 3380 Z=Y 3390 IF Z>9 THEN PRINT TAB(1);Z;"- ";ELSE PRINT TAB(1);" ";Z;"- "; 3400 GOSUB 5570 'PRINT FILE NAME TO SCREEN 3410 Z=Y+COLY 3420 IF Z>DIRMAX GOTO 3490 3430 IF Z>9 THEN PRINT TAB(17);Z;"- ";ELSE PRINT TAB(17);" ";Z;"- "; 3440 GOSUB 5570 3450 Z=Y+(COLY*2) 3460 IF Z>DIRMAX GOTO 3490 3470 IF Z>9 THEN PRINT TAB(33);Z;"- ";ELSE PRINT TAB(33);" ";Z;"- "; 3480 GOSUB 5570 3481 Z=Y+(COLY*3) 3482 IF Z>DIRMAX GOTO 3490 3483 IF Z>9 THEN PRINT TAB(49);Z;"- ";ELSE PRINT TAB(49);" ";Z;"- "; 3484 GOSUB 5570 3485 Z=Y+(COLY*4) 3486 IF Z>DIRMAX GOTO 3490 3487 IF Z>9 THEN PRINT TAB(65);Z;"- ";ELSE PRINT TAB(65);" ";Z;"- "; 3488 GOSUB 5570 3490 PRINT 3500 NEXT Y 3510 PRINT 3600 GOTO 520 5570 PRINT A$(Z);:RETURN ELSE PRINT TAB(65);" ";Z;"- "; 3488 GOSUB 5570 3490 PRINT 3500 NEXT Y 3510 PRINT 3600 GOTO 520 5570 PRINT A$(Z);:REK THEN 2010 ELSE 2030 2080 RETURN 3000 COLY=INT(DIRMAX/5) 'PRINT 5 COLUMNS WIDE (FOR 80 COLUMN SCREEN) 3360 IF DIRMAX/5>COLY THEN COLY=COLY+1 3370 FOR Y=1 TO COLY 3380 Z=Y 3390 IF Z>9 THEN PRINT TAB(1);Z;"- ";ELSE PRINT TAB(1);" ";Z;"- "; 3400 GOSUB95 DEFINT D,I-L,O,U-Z 99 DEFSTR A 100 DIRMAX=128 'MAXIMUM # OF DIRECTORY ENTRIES (EXTENDED FROM STANDARD 64) 110 PRINT CHR$(26) 'CLR SCREEN CODE OSBORNE, FOR ZORBA USE CHR$(27)+"E" 120 DIM D(8,DIRMAX),A$(DIRMAX),B$(DIRMAX) 130 FILES"*.BAS" 'DISPLAY ALL .BAS FILES ON SCREEN 140 OFFSET=&HF700:COLUMN=0:Y=1 'FOR OSBORNE OFFSET IS &HF000 PEEK VIDEO RAM 150 VIDEO=OFFSET+COLUMN*14 'TO GET FILE NAMES INTO ARRAY 170 IF (PEEK(VIDEO))=32 THEN 230 180 FOR X=0 TO 7 'READ FILE NAME INTO ARRAY 190 D(X,Y)=PEEK(VIDEO+X):A$(Y)=A$(Y)+CHR$(D(X,Y)) 200 NEXT X 210 Y=Y+1:COLUMN=COLUMN+1 220 GOTO 150 230 OFFSET=OFFSET+80:COLUMN=0 'IF THE FILE NAME STARTS WITH A SPACE 240 VIDEO=OFFSET+COLUMN*14 'DROP DOWN TO THE NEXT LINE 250 IF (PEEK(VIDEO))=32 THEN DIRMAX=Y-1:GOTO 270 260 GOTO 180 270 PRINT CHR$(26) 'USE APPROPRIATE CLEAR SCREEN CODE. CLEAR SCREEN 310 PRINT TAB(10);CHR$(27)+"p";" M E N U FOR MBASIC PROGRAMS ON THIS DISK ";CHR$(27)+"q" 320 PRINT TAB(10);CHR$(27)+"p";" ORIGINAL PROGRAM BY JIM DUNN (C) 1985 12/85 FOGHORN ";CHR$(27)+"q" 322 PRINT TAB(10);CHR$(27)+"p";" DIRECTORY SORT ROUTINE ADDED BY T. S. COX 12/24/85 ";CHR$(27)+"q" 324 PRINT TAB(10);CHR$(27)+"p";" ZORBA REVERSE VIDEO VERSION WITH 4 COLUMNS OF FILENAMES ";CHR$(27)+"q" 340 PRINT 510 PRINT 515 GOSUB 2000:GOTO 3000 520 PRINT" ENTER NUMBER OF PROGRAM YOU WISH TO RUN, PRESS ";:INPUT C 530 G$=A$(C) 540 PRINT"LOADING ";G$ 550 RUN G$ 560 END 2000 'SHELL-METZNER SORT 2005 M=DIRMAX 2010 M=M\2:IF M=0 THEN 2080 2020 K=DIRMAX-M:J=1 2030 I=J 2040 L=I+M 2050 IF A$(I)<=A$(L) THEN J=J+1:IF J>K THEN 2010 ELSE 2030 ELSE 2060 2060 SWAP A$(I),A$(L):I=I-M:IF I>0 THEN 2040 2070 J=J+1:IF J>K THEN 2010 ELSE 2030 2080 RETURN 3000 COLY=INT(DIRMAX/4) 'PRINT 4 COLUMNS WIDE (FOR 80 COLUMN SCREEN) 3360 IF DIRMAX/4>COLY THEN COLY=COLY+1 3370 FOR Y=1 TO COLY 3380 Z=Y 3390 IF Z>9 THEN PRINT TAB(1);Z;"- ";ELSE PRINT TAB(1);" ";Z;"- "; 3400 GOSUB 5570 'PRINT FILE NAME TO SCREEN 3410 Z=Y+COLY 3420 IF Z#>DIRMAX GOTO 3490 3430 IF Z>9 THEN PRINT TAB(20);Z;"- ";ELSE PRINT TAB(20);" ";Z;"- "; 3440 GOSUB 5570 3450 Z=Y+(COLY*2) 3460 IF Z>DIRMAX GOTO 3490 3470 IF Z>9 THEN PRINT TAB(40);Z;"- ";ELSE PRINT TAB(40);" ";Z;"- "; 3480 GOSUB 5570 3481 Z=Y+(COLY*3) 3482 IF Z>DIRMAX GOTO 3490 3483 IF Z>9 THEN PRINT TAB(60);Z;"- ";ELSE PRINT TAB(60);" ";Z;"- "; 3484 GOSUB 5570 3490 PRINT 3500 NEXT Y 3510 PRINT 3600 GOTO 520 5570 PRINT CHR$(27)+"p";" ";A$(Z);" ";CHR$(27)+"q";:RETURN 4 GOSUB 5570 3490 PRINM\2:IF M=0 THEN 2080 2020 K=DIRMAX-M:J=1 2030 I=J 2040 L=I+M 2050 IF A$(I)<=A$(L) THEN J=J+1:IF J>K THEN 2010 ELSE 2030 ELSE 2060 2060 SWAP A$(I),A$(L):I=I-M:IF I>0 THEN 2040 2070 J=J+1:IF J>K THEN 2010 ELSE 2030 2080 RETURN 3000 COLY=INT(DIRMAX/4) 'PRINT 4 COLUMNS WIDE (FOR 80 COLUMN SCREEN) 3360 IF DIRMAX/4>COLY THEN COLY=COLY+1 3370 FOR Y=1 TO COLY 3380 Z=Y 3390 IF Z>9 THEN PRINT TAB(1);Z;"- ";ELSE PRINT TAB(1);" ";Z;"- "; 3400 GOSUB 5570 'PRINT FILE NAME TO SCREEN 3410 Z=Y+COLY 3420 IF Z30 'Telephon written by 40 'Peter Havholm 50 'College Relations Officer 60 'The College of Wooster 70 'Wooster, Ohio 44691 80 'If you make this program better (easily done), please let me know. 100 'This Program is Telephon 110 'Instructions optional 120 PRINT CHR$(26) 130 INPUT"WANT INSTRUCTIONS--ENTER Y OR N";IN$ 140 PRINT CHR$(26):IF IN$<>"Y" THEN 710 150 'Initialize Index File (ONCE ONLY!!!) 160 PRINT:PRINT:PRINT:PRINT:INPUT"INITIALIZE INDEX FILE (Y OR N)";G$ 170 IF G$="N"THEN 330 180 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT 190 PRINT"THIS SHOULD ONLY BE DONE ONCE, OR IT WILL ERASE":PRINT 200 PRINT"A LOT OF HARD WORK.":PRINT:PRINT:PRINT 210 INPUT"ARE YOU SURE YOU WANT TO (Y OR N)";YN$:PRINT 220 IF YN$="N" THEN 330 230 OPEN "R",#2,"B:INDEX",5 240 FIELD #2,5 AS F$ 250 IV=1 260 FOR J=1 TO 400 270 LSET F$=MKI$(IV) 280 PUT #2,J 290 NEXT J 300 CLOSE #2 310 PRINT CHR$(26) 320 'Instructions 330 PRINT:PRINT:PRINT:PRINT "Records in this file have five fields:":PRINT 340 PRINT "LAST NAME: 25 CHARACTERS MAXIMUM" 350 PRINT 360 PRINT "FIRST NAME: 10 CHARACTERS MAXIMUM" 370 PRINT 380 PRINT "TITLE: 25 CHARACTERS MAXIMUM" 390 PRINT 400 PRINT "EMPLOYER: 40 CHARACTERS MAXIMUM" 410 PRINT 420 PRINT "TELEPHONE: 13 CHARACTERS MAXIMUM":PRINT:PRINT 430 INPUT"PRESS RETURN TO CONTINUE ",CO$:PRINT:PRINT:PRINT:PRINT CHR$(26) 440 PRINT "Examples: ROBINSON" 450 PRINT 460 PRINT " GEORGE M." 470 PRINT 480 PRINT " BUSINESS EDITOR" 490 PRINT 500 PRINT " THE NEW YORK TIMES" 510 PRINT 520 PRINT " 212-423-7900 530 PRINT 540 PRINT "DO NOT PUT COMMAS IN ANY ENTRY!!!" 550 PRINT:PRINT"ADD DISTINGUISHING NUMBER TO COMMON LAST NAME." 560 PRINT:PRINT"Eg.: 'JOHNSON1' INSTEAD OF JUST 'JOHNSON'." 570 PRINT:PRINT"AND THEN ASK FOR FILE ONLY WITH COMPLETE ENTRY." 580 PRINT:PRINT:INPUT"PRESS RETURN TO CONTINUE ",M$ 590 PRINT CHR$(26) 600 PRINT:PRINT"IT IS A GOOD IDEA TO ENTER A CROSS-LISTING BY" 610 PRINT:PRINT"EMPLOYER EACH TIME YOU ENTER A NAME." 620 PRINT:PRINT"Eg.:" 630 PRINT:PRINT" PLAIN DEALER1" 640 PRINT:PRINT" ---------- (10 HYPHENS)" 650 PRINT:PRINT" EDITOR 'FRIDAY'" 660 PRINT:PRINT" GEORGE M. ROBINSON 670 PRINT:PRINT" 216-344-4532 680 PRINT:PRINT:PRINT:PRINT:INPUT"PRESS RETURN TO CONTINUE",C 690 PRINT CHR$(26) 700 'Open Main File and Index File; Display Menu 710 OPEN "R",#1,"ROLO",113 720 FIELD #1,25 AS NA$,10 AS NA1$,25 AS TI$,40 AS EMP$,13 AS PH$ 730 OPEN "R",#2,"INDEX",5 740 FIELD #2,5 AS F$ 750 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT:PRINT 1,"CREATE NEW ENTRY." 760 PRINT 770 PRINT 2,"DISPLAY NAME & NUMBER." 780 PRINT 790 PRINT 3,"RE-WRITE AN ENTRY." 800 PRINT 810 PRINT 4,"QUIT." 820 PRINT 830 PRINT 5,"PRINT OUT INDEX." 840 PRINT:PRINT 6,"PRINT OUT WHOLE DIRECTORY." 850 PRINT 860 PRINT:PRINT:INPUT"CHOOSE A NUMBER";CHOICE 870 PRINT 880 IF (CHOICE>0) AND (CHOICE<7) THEN 920 890 PRINT "BAD CHOICE NUMBER" 900 PRINT:PRINT:INPUT "PRESS RETURN TO TRY AGAIN",TA 910 GOTO 750 920 ON CHOICE GOSUB 940,1220,1520,1910,1940,2090 930 GOTO 750 940 'Build a new entry 950 INPUT"LAST NAME";N$:PRINT 960 GOSUB 2260 970 FOR I=1 TO 400 980 GET #2,I 990 NUM=CVI(F$) 1000 IF NUM=RECNUM% THEN 1030 1010 IF NUM>1 THEN 1200 1020 GOTO 1070 1030 PRINT "THAT RECORD NUMBER IS IN USE.":PRINT 1040 PRINT "ADD A DIGIT TO THE NAME AND TRY AGAIN.":PRINT 1050 INPUT "PRESS RETURN TO CONTINUE.",RE 1060 GOTO 1190 1070 LSET F$=MKI$(RECNUM%) 1080 PUT #2,I 1090 LSET NA$=N$ 1100 INPUT "FIRST NAME";A1$:PRINT 1110 LSET NA1$=A1$ 1120 INPUT "TITLE";T$ 1130 LSET TI$=T$:PRINT 1140 INPUT "EMPLOYER";E$ 1150 LSET EMP$=E$:PRINT 1160 INPUT "PHONE NUMBER";P$ 1170 LSET PH$=P$:PRINT 1180 PUT #1,I 1190 I=400 1200 NEXT I 1210 RETURN 1220 'Display an entry 1230 INPUT "NAME";N$:PRINT 1240 GOSUB 2260 1250 FOR I=1 TO 400 1260 GET #2,I 1270 NUM=C$VI(F$) 1280 IF NUM<2 THEN 1310 1290 IF NUM<>RECNUM% THEN 1500 1300 GOTO 1360 1310 PRINT "THAT NAME IS NOT IN THE FILE.":PRINT 1320 PRINT "CHECK TO MAKE SURE YOU TYPED CORRECTLY":PRINT 1330 PRINT "AND THEN MAKE A NEW ENTRY.":PRINT 1340 INPUT "PRESS RETURN TO CONTINUE",RE 1350 GOTO 1490 1360 GET #1,I 1370 PRINT CHR$(26) 1380 PRINT NA$:PRINT 1390 PRINT NA1$:PRINT 1400 PRINT TI$:PRINT 1410 PRINT EMP$:PRINT 1420 PRINT PH$:PRINT:PRINT:PRINT:PRINT:PRINT 1430 INPUT "WANT TO PRINT OUT ENTRY (Y OR N)";YN$ 1440 IF YN$="Y" THEN 1450 ELSE 1490 1450 LPRINT NA$:LPRINT:LPRINT NA1$:LPRINT:LPRINT TI$:LPRINT: 1460 LPRINT EMP$:LPRINT:LPRINT PH$:LPRINT 1470 FOR J=1 TO 12:PRINT:NEXT J 1480 INPUT "PRESS RETURN TO CONTINUE",RE 1490 I=400 1500 NEXT I 1510 RETURN 1520 'Rewrite an entry 1530 INPUT "LAST NAME";N$ 1540 GOSUB 2260 1550  FOR I=1 TO 400 1560 GET #2,I 1570 NUM=CVI(F$) 1580 IF NUM<2 THEN 1610 1590 IF NUM<>RECNUM% THEN 1890 1600 GOTO 1650 1610 PRINT "THAT NAME IS NOT IN THE FILE.":PRINT 1620 PRINT "CHECK TO MAKE SURE YOU TYPED CORRECTLY.":PRINT 1630 INPUT "PRESS RETURN TO CONTINUE.",RE 1640 GOTO 1880 1650 GET #1,I 1660 PRINT CHR$(26) 1670 PRINT "MAKE CHANGES AS EACH ITEM APPEARS.":PRINT 1680 PRINT "IF NO CHANGE, PRESS RETURN.":PRINT 1690 PRINT "YOU CANNOT CHANGE THE LAST NAME":PRINT 1700 PRINT "BECAUSE THAT CHANGES THE RECORD NUMBER.":PRINT 1710 PRINT "MAKE A NEW ENTRY IF THE LAST NAME IS IN ERROR.":PRINT 1720 INPUT "PRESS RETURN TO CONTINUE.",RE 1730 PRINT:PRINT NA$:PRINT NA1$:PRINT TI$: 1740 PRINT EMP$:PRINT PH$:PRINT:PRINT:PRINT 1750 PRINT NA1$:PRINT:INPUT A1$:PRINT 1760 IF A1$<"1" THEN 1780 1770 LSET NA1$=A1$:PRINT 1780 PRINT TI$:PRINT:INPUT I$:PRINT 1790 IF I$<"1" THEN 1810 1800 LSET TI$=I$:PRINT 1810 PRINT EMP$:PRINT:INPUT MP$:PRINT 1820 IF MP$<"1" THEN 1840 1830 LSET EMP$=MP$:PRINT 1840 PRINT PH$:PRINT:INPUT OH$:PRINT 1850 IF OH$<"1" THEN 1870 1860 LSET PH$=OH$:PRINT 1870 PUT #1,I 1880 I=400 1890 NEXT I 1900 RETURN 1910 'Quit 1920 CLOSE 1930 END 1940 'Print out index 1950 FOR I=1 TO 400 1960 GET #2,I 1970 NUM=CVI(F$) 1980 IF NUM>1 THEN 2070 1990 PRINT:PRINT"YOUR FILE HAS";I-1;"NAMES.":PRINT 2000 INPUT"DO YOU WANT THEM ALL PRINTED OUT (Y OR N)";YN$ 2010 IF YN$="N" THEN 2060 2020 FOR J=1 TO I-1 2030 GET #1,J 2040 LPRINT NA$;NA1$;"----- ";PH$:LPRINT 2050 NEXT J 2060 I=400 2070 NEXT I 2080 RETURN 2090 'Print out entire file 2100 FOR I=1 TO 400 2110 GET #2,I 2120 NUM=CVI(F$) 2130 IF NUM>1 THEN 2230 2140 PRINT:PRINT"YOUR FILE HAS";I-1;"NAMES.":PRINT 2150 INPUT"DO YOU WANT THE WHOLE THING PRINTED OUT (Y OR N)";YN$ 2160 IF YN$="N" THEN 2220 2170 FOR J=1 TO I-1 2180 GET #1,J 2190 LPRINT NA$:LPRINT NA1$:LPRINT TI$ 2200 LPRINT EMP$:LPRINT PH$:LPRINT 2210 NEXT J 2220 I=400 2230 NEXT I 2240 RETURN 2250 'Subroutine to figure out RECNUM% 2260 RECNUM%=0 2270 FOR I=1 TO LEN(N$) 2280 RECNUM%=RECNUM%+((ASC(MID$(N$,I,1)))-48)*(26-I) 2290 NEXT I 2300 RETURN 1 TO LEN(N$) I-1;"NAMES.":PRINT 2000 INPUT"DO YOU WANT THEM ALL PRINTED OUT (Y OR N)";YN$ 2010 IF YN$="N" THEN 2060 2020 FOR J=1 TO I-1 2030 GET #1,J 2040 LPRINT NA$;NA1$;"----- ";PH$:LPRINT 2050 NEXT J 2060 I=400 2070 NEXT I 2080 RETURN 2090 'Print out entire file 2100 FOR I=1 TO 400 2110 GET #2,I 2120 NUM=CVI(F$) 2130 IF NUM>L                                                                                                                                                                                                             %                                                                                                                                                                                                    HAVHOLM PETER COLLEGE RELATIONS OFFICERTHE COLLEGE OF WOOSTER 216-263-2243 BASLIST2COM'()BASLIST2DOC}*+,-./0123456789BASLIST2BAS*:;<=>?DESK-DM BAS@ABCDEFGHIJKLMNODESK-DM BASUPQRSTUVWXYZDESK-DM DOC[\]CALC-DM BAST^_`abcdefghDDISK-DMBASijkIDENT-DM lINIT-DM BASmDUCK BAS5nopqrstGRADES BASJuvwxyz{|}~REPEAT BAS+TYPEFASTBASTYPEFASTBAS TYPING BAS MAKEMENUDOCMAKEMN8BBASMAKEMNZ2BASTELEPHONBAS=INDEX ROLO $$$ This is the release date of the disk. REPEAT BAS TYPEFASTBAS DYPEFASTBAS TYPING BAS MAKEMENUDOC MAKEMN8BBAS MAKEMNZ2BAS TELEPHONBAS INDEX ROLO IDENT-DM. 6C 20 128 1 INIT-DM .BAS 7F F5 768 6 DUCK .BAS EE DE 6784 53 GRADES .BAS E8 D2 9472 74 REPEAT .BAS 9F EE 5504 43 TYPEFAST.BAS CF EF 17536 137 TYPING .BAS 09 5E 1280 10 MAKEMENU.DOC 5F 84 1792 14 MAKEMN8B.BAS 04 CC 2816 22 MAKEMNZ2.BAS 34 C0 2560 20 TELEPHON.BAS 6A 7A 7808 61 INDEX . 9D 93 2048 16 ROLO  Fog Library Disk FOG-CPM.083 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. MBasic programs and utilities. Filename Description -06-00 .86 This is the release date of the disk. -CPM083 .DOC This is the description of the disk contents. BASLIST .COM 4939 15K [Basic lister 1 of 2] Program to list Basic programs to the screen in a "pretty" format. MBasic source code included. BASLIST .BAS 300C 5K [Basic lister 2 of 2] BASLIST2.COM 4ED4 19K ver. 2.0 [Basic lister 1 of 3] Basic program lister with optional parameters that can specify the number of characters per line, output destination (screen, printer, or disk file), etc. MBasic source included. BASLIST2.DOC 2E68 16K ver. 2.0 [Basic lister 2 of 3] BASLIST2.BAS EF04 6K ver. 2.0 [Basic lister 3 of 3] DESK-DM .BAS CFD6 27K [Desk Manager 1 of 6] MBasic program to provide calculator, memo writer, rolodex, and much more with an Osborne 1. DESK-DM .DOC 68F0 3K [Desk Manager 2 of 6] CALC-DM .BAS 771F 11K [Desk Manager 3 of 6] DDISK-DM.BAS 6C0E 3K & [Desk Manager 4 of 6] IDENT-DM. 6C20 1K [Desk Manager 5 of 6] INIT-DM .BAS 7FF5 1K [Desk Manager 6 of 6] DUCK .BAS EEDE 7K MBasic shoot 'em game for Osborne 1 which can be easily modified for other computers. GRADES .BAS E8D2 10K MBasic program to manage a teacher's class grades and list of students. REPEAT .BAS 9FEE 6K MBasic game that displays a sequence of numbers you must repeat in order to win. TYPEFAST.BAS CFEF 18K An MBasic touch typing drill program. TYPING .BAS 095E 2K Another MBasic typing drill program. MAKEMENU.DOC 5F84 2K [Make Menu Shell 1 of 3] An MBasic menu shell program for memory mapped computers. A generic version and a Zorba-configured version included. MAKEMN8B.BAS 04CC 3K [Make Menu Shell 2 of 3] MAKEMNZ2.BAS 34C0 3K [Make Menu Shell 3 of 3] TELEPHON.BAS 6A7A 8K [Telephone 1 of 3] MBasic program to maintain a telphone list. INDEX . 9D93 2K [Telephone 2 of 3] ROLO . 3175 1K [Telephone 3 of 3]  Shell 1 of 3] An MBasic menu shell program for memory mapped computers. A generic version and a Zorba-configured version included. MAKEMN8B.BAS 04CC 3K [Make Menu Shell 2 of 3] MAKEMNZ2.BAS 34C0 3K [Make Menu Shell 3 of 3] TELEPHON.BAS 6A7A 8K [Telephone 1 of 3] M'