IMD 1.16: 29/05/2007 12:25:39 FOGCPM.030 --FOGCPM030AUTKYS60COM4 AUTKYS60WS  CLOCK COM"CLOCK DOC CLOCK C COLDBOOTCOMCOLDBOOTDOCCURS-KAYCOMCURS-KAYDOCCURS-KAYASMDB19 COM !"#$%&'()*+,-DB19 COMv./0123456789:;<-03-00 86 DB19 DOC)=>?@ABDDRAW COMCDEFGHIJKLMNOPQRDDRAW COM%STUVW-CPM030 DOCDDRAW DOC9XYZ[\]^_DDRAW NOT`DUMP10 COMaDUMP24 COMbDUMP1084DOCcdeK4TIME COM fgK4TIME DOC hiKP-CHARSCOMKjklmnopqrsKP-CHARSDOCtKP4TIME COMuKP4TIME DOC vwKP4TIME2ASMxyz{|}~KP4TIME2ASM+SETPAD COMfSETPAD10WS $CURSOR COMCURSOR DOC This is the disk name. >2  :6*1!c#~3'O!cB#~ >?!Z*]!v#~fZ:] :/_!06 \:\M# ʝw x‹#e ʶ6. #w# w# w#6!:/o##Y}2/##"   Executing -> $!/#~W*.|g"-/ *-."*-.>w#|w*-w# x"3#@w#6: _0123456789-, . !"#$%&'()0123456789-, . - END OF CODE - !9"1/̀ Enter Name of File to Create -->  ':(!(#~w %P Which drive is the file to be created on --> ABC  That Drive is not on line Hit 3@2\ (P)arallel or (S)erial printer --> !ͬP?S7>2D>2 Autoboot Another Program ? (y/n) --> !ͬYʑN t Enter the name of the file to AUTOBOOT -->  ':(ʑ(!/# .w y2/>2f' Use CTRL-J to move the cursor block and when it is over the correct key, hit the ESCAPE key. You will then be asked how many KeyStrokes this key is to submit when pressed. Hit -X- in order to exit. CP/M 2.2U will only allow 1 key.!>2!!D::,!d"!w"/!r:!:!:!r::o!e"!{"/!D:!::œ!f"!"/!r:!::!g"!"/!:ͬXE :2 >2 /=2AHow many keys --> 02:V: :atʇʚ : <!d:ʪ6!wê!e:ʪ6!{ê!f:ʪ6!ê!g:ʪ6!̈́=4AEnter keys --> /2':w# :_:2  =6DAll Keys Have Been Entered Hit .ͬ  '̀ Use CTRL-J to move the cursor block and when it is over the correct key, hit the ESCAPE key. You will then be asked how many KeyStrokes this key is to generate when pressed. Hit -X- in order to exit.!>2! !!!!!3!a!M!{!!!!!!G:: !h"!: !"!"/!:!:!:!::" !i"!: !"!"/!G:!::` !j"!:Z !"!"/!:!::ž !k"!:˜ !"!"/!:!:: !l"!: !"!$"/!:!3:: !m"!: !"!."/!:!a::X !n"!:R !"!8"/!3:!M::– !o"!: !"!B"/!a:!{: : !p"!: !"!L"/!M: !: :  !q"!: !"!V"/!{: !: : P !r"!:J !"!`"/!: !: : Ž !s"!:ˆ !"!j"/!: !: : !t"!: !"!t"/!: !:: !u"!:!"!~"/!:ͬXe 0H:@2Û >2Û /=2AHow many keys --> 02:ƒ: K͐:K:#6I\ o ʂ ʕ ʧ ʺK!h:6!!i:6!!j:6!!k:6!!l:6!!m:6!!n:6!!o:6!!p:6!!q:6!!r:p!!s:6!!t:6!!u:6!̈́=4AEnter keys --> /2':w# :_:28 =6DAll Keys Have Been Entered Hit .ͬ=2@=4@=6CÛ 6# ‡:  ) 3 = G Q[:2!:2!:2!:2!:2!$:2!.:2!8:2!B:2!L:2!V:2!`:2!j:2!t:2!~:!"!""**~ʒ#"À* """~ʯÀ*>w#w#w#w! F##w 8=*4Writing New File to Disk !F>222 \ă\<ʜ!|D!\œ xG\ File has been written !/* Ô No Directory Space on Destination!$ No Space Left on Destination!$}o|g{/_z/W a{_B6=.;=. *~s2 :W*:‚ ~ʥ2 :W # ‚C6:@2^Tj+#~ L+#~ =2h2|!:'~#  !\> #w W(!\# w.ww e!e6C#6O#6M/ That file already exists. Overwrite ? (y/n) --> Y Want to start again ? (y/n) --> Y Ô\ 7?C4> >LB3C3 cB0B1$ yC0C1$ B3AutoKeys 6.0 Gary Conway Infinity Design Concepts 1985,86C3~#_W###R0#0R##0##.0.#/0/#:0:#;0;#F0F#G0G$R0R;#x#x#xRxR;R;R;#;.k.;/k/;:x:;;x;;FxF;GxGH#HRK#KRX#XR[#[Rh#hGk#kG'" '# '$ '% '& (" (# ($7(% (& )" )# )$ )% )& '( ') '* '+ ', (( () (*8(+ (, )( )) )* )+ ), '. '/ '0 '1 '2 (. (/ (09(1 (2 ). )/ )0 )1 )2 '4 '5 '6 '7 '8 (4 (5 (6-(7 (8 )4 )5 )6 )7 )8 +" +# +$ +% +& ," ,# ,$4,% ,& -" -# -$ -% -& +( +) +* ++ +, ,( ,) ,*5,+ ,, -( -) -* -+ -, +. +/ +0 +1 +2 ,. ,/ ,06,1 ,2 -. -/ -0 -1 -2 +4 +5 +6 +7 +8 ,4 ,5 ,6,,7 ,8 -4 -5 -6 -7 -8 /" /# /$ /% /& 0" 0# 0$10% 0& 1" 1# 1$ 1% 1& /( /) /* /+ /, 0( 0) 0*20+ 0, 1( 1) 1* 1+ 1, /. // /0 /1 /2 0. 0/ 00301 02 1. 1/ 10 11 12 3" 3# 3$ 3% 3& 3' 4" 4# 4$ 4% 4& 4'05" 5# 5$ 5% 5& 5' 3( 3) 3* 3+ 3, 4( 4) 4* 4+ 4, 5( 5) 5* 5+ 5, /4 /5 /6 /7 /8 04 05 06E07 08 14 15 16N17 18 24 25 26T27 28 34 35 36E37 38 44 45 46R47 48 54 55 56 57 58 3. 3/ 30 31 32 4. 4/ 40.41 42 5. 5/ 50 51 52 !" !#/!$|!%\!& "" "# "$|"% "& #" ## #$|#% #& !( !) !*|!+ !, "( ") "*|"+ ", #( #)\#*|#+/#, !. !/ !0 !1 !2 ".<"/-"0-"1-"2 #. #/ #0 #1 #2 !4 !5 !6 !7 !8 "4 "5-"6-"7-"8>#4 #5 #6 #7 #8 0123456789-, . )8 +" +# +$ +% +& ," ,# ,$4,% ,& -" -# -$ -% -& +( +) +* ++ +, ,( ,) ,*5,+ ,, -( -) -* -+ -, +. +/ +0 +1 +2 ,. ,/ ,06,1 ,2 -. -/ -0 -1 -2 +4 +5 +6 +7 +8 ,4 ,5 ,6,,7 ,8 -4 -5 -6 -7 -8 /" /# /$ /% /& 0" 0# 0$10% 0& 1" 1# 1$ 1% 1& /( /) /* /+ /, 0( 0) 0*20+ 0, 1( 1) 1* 1+ 1, /. // /0 /1 /2 0. 0/ 00301 02 1. 1/ 10 11 12 3" 3# 3$ 3% 3& 3' 4" 4# 4$ 4% 4& 4'05" 5# 5$ 5% 5& 5' 3( 3) 3* 3+ 3, 4( 4) 4* 4+ 4, 5( 5) 5* 5+ 5, /4 /5 /6 /7 /8 04 05 06E07 08 14 15 16N17 18 24 25 26T27 28 34 35 36E37 38 44 45 46R4 AUTOKEYS.WS (c) 1985,86 Infinity Design Concepts 1052 Parkway Drive Louisville, Kentucky 40217 Gary Conway (502)634-0054 .pa O V E R V I E W Thi progra wil creat .CO fil tha wil configur th keypa o an Kaypr compute usin CP/ 2.2 2.2 2.2Ƞ o 2.2U Th progra automaticall check t se whic versio i bein use an create th .CO fil accordingly Th F, an version wil allo u t fou key t b generate b eac o th vecto an numeri keypa keys CP/͠ 2.2ՠ wil allo onl on keystrok pe vecto ke an u t 8 key pe numeri ke wit tota limi o 24 keys Autokey wil allo on keystrok pe vecto ke a well bu onl nin keystroke pe numeri keypa ke fo 2.2U. NOTE: A .COM file that is created under 2.2G MUST be run on a machine using 2.2G. That is, the .COM files created with each run of AUTOKEYS can only be run on the system that they were created on. Th progra wil als allo settin th :LS devic t eithe seria o parallel Th use als ha th optio o creatin th ne fil o an o th drive available Anothe optio availabl i th optio o bootin another program. FOR EXAMPLE: Creat th fil WSKEYS.CO wit AUTOKEY. W tel AUTOKEY tha th fil w ar goin t boo i WS.CO an the configur th keypa t ou ow likin (jus a yo woul wit CONFIG.COM) The whe w ru WSKEYS.COM th keypa wil b define a w tol AUTOKEY t d an WordSta wil b loaded Ther i anothe optio availabl her also I w type: A0>WSKEYS B:PRINT.TST The following will occur; WSKEYS will run, configuring the keypad for WordStar WordStar will then be loaded and executed WordStar will open the file B:PRINT.TST Th configuratio routin i abou th sam a wit CONFIG.COM Us th LINEFEE ke (CTRL-J t mov th curso bloc aroun th keypa table an whe th bloc i ove th correc ke t b configured hi th ESCAP key Yo wil the b aske ho man key thi ke i t generate Upo answering yo wil b aske fo th key themselves Whe finished hi a uppe o lowe cas "X t mov t th nex screen Whe al o th configurin i complete th ne fil wil b written I th ne fil alread exist o th selecte drive yo wil b prompte whethe o no t overwrite the old file. Al o th change tha th ne .CO fil make ar i RAM I permanen change ar desired us th CONFIG.CO program Permanen change ar no th purpos fo th AUTOKEY program AUTOKEY wa designe s tha progra tha require differen vecto o numeri keypa value ca b ru withou coldbootin th machine If fo example yo ar usin WordSta i driv an dBAS comman fil dis i B on ma ru WordSta wit th keypa configure fo WordSta an then usin th option ru progra tha wil se th key fo th dBAS progra t use Whe yo ar read t g bac t WordStar yo ma the ru th progra tha reconfigure th keypad back to WordStar. - - - - End File - - - -  exist o th selecte drive yo wil b prompte whethe o no t overwrite the old file. Al o th change tha th ne .CO fil make ar i RAM I permanen change ar desired us th CONFIG.CO program Permanen change ar no th purpos fo th AUTOKEY program AUTOKEY wa designe s tha progra tha require differen vec*+%"J%"H%"F " " "y 6"C+6+!^6 F+N+<!* !!9~#ʗ RO"k'k +}|+#~ʂu6#~#<ʷ>!4R6#6*!ͼ* |ʴ͕!͸"r! ͸" R Can't open > or < file.$èw*6 )! 9!"6*':B<*C 2B ́F  €> _*C~+#4N s> > !-:EºF2B_~ÿ   ! ʘo&!* ͬ> !-}  > _con:rdr:pun:lst: ??_~O7 !"# !  #i& ~!j~#~#F6,6pw#62BD!9Yy=`>wS<!is w#6 w+w ~#’s#r{{ ڵ!-#^{!!i~<6!~~r!N!pY}*gyb>w#%!=)1{=`bʁx ''h&{ !~!pN#F{p+pH#ͅ¼ +!9~ !~b!5> 6> *g w`i#^᯾"%,!1|!!9n&:ʬɯ2>h!9Y):|!RwY#4!`w>2>2::Ecx::O¡! DMv:: !Write error - Disk full $`iD;!9~=+`V+^+F+N "V> w+ w w##w w #~+:3~##X@~#.DX3*V++Xw#Ja O! ~_#V!$r+sbk#|}o|g}o|g}o|g|!,|}!ºº,ɯ|ʦ!|}!-z{!,zz{!-|!|g|}!-ɵz!{!-||g}o(*);{ozg+|/g}/o~og~#fos#rN#F#x~#~#hh`iDM!z>S\))җ =ɯìzK|KMD!x<z>jS\>))#  =KK!9"*++"Yz !9*+ *2  *++"Y"**++"Y͌  *++"Y"**++"Yͤ  * !9Y͌ !9Y"!9Y" !9Y"!!9Y͌ *S͠ *S͠͠ *#"+S *##| *#"+!9S}*6!9S*ͬ!9*^*++"!""( !"* *#"S"ͼh ! }2*ͼ"|ʏ *#"+S"*|° !0}2*#"+S" "*| *#" ""* *#"+S"͠ *͠ !"* !9Y++^". *. *. #  !9Y++^Y!   !"( [ ! "( [ !"( !9Y++^Y", *, *( Ͳ  !9Y++^Y". "0 *0 #"0 +~ʤ Ô *0 +"0 *. A*ʿ *͠ *. *"0 *. *0  * E  f c& dC oL uU x~ s * !" *S"0A *9͠h *  ̀*#"+S" & * " !9Y"r !9Y"t !9Y+^*r ͼʲ *t ! ͜ý *r +*t ͖͉}*r ͼ *t !5 *r ͼ *t ! ͜ *t !5"t *t |Š !9Y!9!T9Y: !T9YKA !T9Y" !9P"* !V9Yv "!T9Yڟ :T|ʖ !- *+"ß *+"6-** !P9!9!9P"!V9Y!V9Yv "** !P9!9Y!9YA" *ͼ:T* a* +" #|K!9Y#^+S *+"*|`! !a!9Y*ʈ!9Y *+"a!9Y ʟ!0â!7!9Y!"!͛! ! ͛!$ͩ:|! ͨ! !͛!$ͩ:"! !͛!$ͩ:"! !͛!$ͩ:"! !͛!$ͩ:"! !͛!$ͩ:"! ! ͛!$ͩ:"! ! 9! j! ;!9!9Y! ͡}!9!9S ̀!9YA^!9!9S))))}!9S!9Y3*8!9Y&}o"8!9!9Y!͡ ̀^!9Y*8"8! !͛!$*͛! !͛!$*͛! !͛!$*͛! !͛!$*͛! !͛!$*͛! ! ͛!$*͛!* !* !* !* !* !* {2}}2&oThe clock is not intialized ! The time and date are: %02d:%02d%02d/A" *ͼ:T* a* +" #|K!9Y#^+S *+"*|`! !a!9Y*ʈ!9Y *+"a!9Y ʟ!0â!7!9Y!"!͛! ! ͛!$ͩ:|! ͨ! !͛!$ͩ:"! !͛!$ͩ:"! !͛!$ͩ:"! !͛!$ͩ:"! !͛!$ͩ:"! ! ͛!$ͩ:"! ! 9! j! ;!9!9Y! ͡}!9!9S ̀!9YA^!9!9S))))}!9S!9Y3*8!9Y&}o"8!9!9Y!͡ ̀^!9Y*8"8! !͛!$*͛! !͛!$*͛! !͛!$*͛! !͛!$*͛! !CLOCK : A program to read the internal clock in KayPro 4-84 and 1985 versions of the KayPro 2X. To call up the program just type CLOCK at the system prompt. The program will give you a reading of the time and date as stored on your internal clock. The major source of this program is from the KAY*FOG bulletin board in San Francisco. I have modified it to run under C/80 (Software Toolworks) by adding the assembly language functions inp() and outp(). Functions are included to set the clock but are not implemented at this time (i.e. you can hack it yourself). For owners of other computers: You can alter this to work with your machine by changing the port assignments, etc. The #defines are at the top of the source code. You will need to know/change: a) PIO Initialization Port (if clock is attached to processor via the PIO, otherwise .. ). b) Clock function Port. c) Clock data I/O Port. Also, the functions numbers given are for the NS-MM58167A clock chip used in the KayPro's. If your machine uses a different clock chip it is your responsibility to check to see if these codes are correct and to chnage them if not! - Rick Warner - 415-321-9446 The major source of this program is from the KAY*FOG bulletin board in San Francisco. I have modified it to run under C/80 (Software Toolworks) by adding the assembly language functions inp() and outp(). Functions are included to set the clock but are not implemented at this time (i.e. you can hack it yourself). For owners of other computers: You can alter this to work with your machine by changing the port assignments, etc. The #defines are at the top of the source code. You will need to know/change: a) PIO Initialization Port (if clock is attached to processor via the PIO, otherwise .. ). b) Clock function Port. c) Clock data I/O Port. Also, the functions numbers given are for the NS-MM58167A clock chip used in #include #define sec 2 /* clock functions */ #define min 3 #define hour 4 #define day 6 #define mon 7 #define year 9 #define func 32 /* function definition port */ #define clock 36 /* clock port */ #define init 34 /* pio init port */ #define initch 15 /* pio init char */ #define initval 29 #define clkstatus 12 #define military 0 #define civilian 1 #define am 0 #define pm 1 #define tme 0 #define dte 1 /* variables */ int bcdtoi(), hours, minutes, seconds, months, days, years, n, i, inp(), outp(); main() /* read the real time clock & display time & date */ { /* initialize and check the clock */ outp(init, initch); outp(func, clkstatus); if (bcdtoi( inp(clock)) != 29) { printf("The clock is not intialized !\n"); exit(); } outp(func, hour); hours = bcdtoi(inp(clock)); /* then get the value of that function */ outp(func,min); minutes = bcdtoi(inp(clock)); outp(func,sec); seconds = bcdtoi(inp(clock)); outp(func,mon); months = bcdtoi(inp(clock)); outp(func,day); days = bcdtoi(inp(clock)); outp(func,year); years = bcdtoi(inp(clock)); printf("\n"); printf("The time and date are: "); Write_time(); printf(" "); Write_date(); printf("\n"); } /* end main */ char Bcd(intval) /* convert an integer value (intval) to byte in packed BCD format before sending it to clock. Not used in this program. */ int intval; { char hinybble; /* hi nybble of packed bcd byte */ hinybble = intval / 10; intval = intval - 10 * hinybble; hinybble = hinybble * 16; return (hinybble + intval); } /* end bcd */ int bcdtoi(bcdbyte) /* convert packed BCD byte read from clock to integer value that can be displayed as an ASCII string. */ int bcdbyte; { int lonybble; /* low nybble of bcdbyte */ lonybble = bcdbyte & 15; bcdbyte = 10 * (bcdbyte / 16); return (bcdbyte + lonybble); } /* end ascii */ Set_time() /* just for example, not used in this program */ { outp(func,hour); outp(clock,Bcd(hours)); outp(func,min); outp(clock,Bcd(minutes)); outp(func,sec); outp(clock,Bcd(seconds)); } /* end set time */ Set_date() /* just for example, not used in this program */ { outp(func,mon); outp(clock,Bcd(months)); outp(func,day); outp(clock,Bcd(days)); outp(func,year); outp(clock,Bcd(years)); } /* end set date */ Write_time() /* display the time */ { printf("%02d:",hours); printf("%02d:",minutes); printf("%02d",seconds); } /* end write time */ Write_date() /* display the date */ { printf("%02d/",months); printf("%02d/",days); printf("%02d",years); } /* end printf date */ int outp(value,port) int value, port; { #asm ; ; function to output a byte to a data port ; POP B ;get return address POP H ;get data for port (variable value) POP D ;get port number (variable port) PUSH D ;restore machine stack PUSH H PUSH B MOV A,E ;get port number STA outp1+1 ;save port number MOV A,L ;get data to send outp1: OUT 0 ;send data to port #endasm } int inp(port) int port; { #asm ; function: to input a byte from data port ; MOV A,L ;get port number STA inp1+1 ;save port number for input inp1: IN 0 ;input data from port MVI H,0 ;zero high byte of number MOV L,A ;put data in reg for calling function #endasm } /* int inp(device) int device; { #asm POP D POP B PUSH B PUSH D LXI H,0 DB 0EDH,068H #endasm } int outp(value, port) int value, port; { #asm POP D POP H POP B PUSH B PUSH H PUSH D DB 0EDH, 069H #endasm } */; ; function to output a byte to a data port ; POP B ;get return address POP H ;get data for port (variable value) POP D ;get port number (variable port) PUSH D ;restore machine stack PUSH H PUSH B MOV A,E ;get port number STA outp!CLOCK DOC CLOCK C COLDBOOT$$$ coldboot.com coldboot.com allows you to reset your Kaypro without having to reach all the way in the back and press the reset button. syntax: A>coldboot > >lCLOCK DOC CLOCK C COLDBOOTCOMCOLDBOOTDOCCURS-KAY$$$JUST A TINY PROGRAM TO MAKE THE KAYPRO CURSOR A BIT TINIER ;BLINKING SLOWLY BUT TAKING ONLY 3 LINES ; Arto Kytohonka, SF-16100 UUSIKYLA, Finland ;CURS-KAYCOMCURS-KAY$$$;JUST A TINY PROGRAM TO MAKE THE KAYPRO CURSOR A BIT TINIER ;BLINKING SLOWLY BUT TAKING ONLY 3 LINES ; Arto Kytohonka, SF-16100 UUSIKYLA, Finland ; ORG 100H START: MVI A,10 OUT 28 MVI A,108 OUT 29 RETS ; Arto Kytohonka,CURS-KAYCOMCURS-KAYDOCCURS-KAY$$$ ÈF'DB19 D2DH2!"|͖*   =""6#}|BD!"| "}00-!~G#~ }q+ph##h"p#w *}"}"}" }* }*}l&*}}!h6#6#q#p* }" }*}|`i"}* 3X<  x}H%Ɛ'@'_ ERROR $ AT PC $"DM6#6#!"*{w#zw!">2DM}|*ڋ"^#V{^#V{_zWڋ{z*w#ww#w###s#rq#p#!5#ʋOM+F+N*}|!"~#fo"{z }|"~#~#~#O~G(}|*##^#V}|Fs#r##q#pw#w#~w#~w7!N#F#~#foov}|w`i}^:0!9BKå DM!9ͥ !9! 9N#F#ͥ ;ÝBK~ !9DM~ ͝DM~ !9DM! 9DM~ !9DM͝;͵!9DMÒ ͵Ò DM~ !9DM1!9DM~ !9DM;ͻͻ1S;ͲqͲ!9DM~ k͓Ͳ! 9DM~ !9DM;͊q͊ò͓͊ÌDMa!9DM~ !9!9!9DM ~ ͵ @PP"6}͇*6}!9~w{_!y+##!}2*9}  |g"9}!H\ >'-sw# T>@2}2} %}͒ Ç*%*}®%}*(}"9}>28}:}W~ !}:8}w %}͒ ~ !}%}ͥ !%}:8}w:%}W!}9%}~ r26}9}o&G>Ow# +q#3:%}!}]&} T>|}n i!,}C }!&}ڂ7>' #p +>'w#>'w #:%}2} !}~PT:6}T6!}~ \+w# @ 6w{28}&}!}~#!&}~#!}q#!}"6}~#T6G&}*6} 2#4?#TG-}*6}'w# A!8}5*6}# }n !$}~ȯw+6+wv:}<2}OF!} 怮w Q_#~ȓAWw>28}`i"6}2-}}*6}>'#>'#>'#>'#>'#>'#>'>'wڵ*6} #~'w!-}~w:8}=?28}!}ó}ͥ  }n iDZA2}x2}pOG>F2}!}r#{i`)!!}~'w#Œ … !} + #?¼! C !}=> pT]w+ ~w!}}G# :#}з( !}!}5q!#}"}w+0 p!}55 p#} + + + + + + 't P'> 't o g"}`i}é *}|œ ɵ!}é ~#~#~#~#~#~#~#~#!}'w#'w#'w#'w#'w#'w#'w!9~A 6/OG #6= x>#w|" DM!x- y)3 )9 )? )E )K )Q )W )|Q| | ʢ z| x)yOxGyxڔ GyO#=€ ogeo| | )ڷ #¯ OÙ \ `i!:}A}-2?}:N}­ 2>}]NN:[}#7 $ ͳ$/ >$:[}ð * ͳ*/ >* . ͳ#>. 2P}_ - ͳ# .>- >2E}2P}O_ >2E}7 \̳ͳð 2G}? > 2G} ͳ#> ,T >2O}> !P}q.p >2?}ͳ#p d !A}q^ƒ ͳv !C}q-” >2F}ͳ>28}\}͒ :}O 2B}2D}!}r#³ :P} =2H}:E}> î :E} 7:C}!D}6C y@G  /%2O}2E}2F}\}~ >:P}2B}Gy@w:E}!F}>k 7>k 4!B}5<2H}:B}!A}G:C}„ :D}OxGxҮ $}W?< =‘ zg zn !$}~ʮ iÔ :H} :F}!E}7:B}+ :P}+ >-G:G}OW* $ $ :F}!E}7O zy:P}ʵ£:E}£:}µã:}>> >0> 28}}n i!>}~2@}67:}@2D}!C} x~6!D}p2B}/O!} #ʊ ʘ y2A}=/2?}:B}>0õ:8}=!B}5:B}2O}!?}~>.:>}!?}/:C}:D}G:A}G2A}x:8}!A}5:A}:C}Y>E!D}:>}35~ >/<-Gyx/ F Gyx0:F}j72F}2E}:>}:@}2>}2"<}|–:>}:M}~W#^#:>}¿zʵ~#)å|~:M}2>}]NS"K}"I}:[}/! &\̳ͳͳ/ͳõ U +s :>}> !|4O:;}F* YU Us >2|> 6> 6U ps :>}:|x> 2<~yUy:>}u*|&|TL:|~X>~͡u͡U!;}:|=U2;}!8}~5*Q}~+"Q}0G>0)0:O}:C}:B}''>,3*<}:}> >-*W}|PU|ʛ>2>}~G#N#"W}"Y}`i"S}"U}ʛ!#€&é/ʧ&ʧ!ʧ\© x©2>}]UN. xu"M}*U}|*S}"U}*W}+"U}*Y}~#"Y}2[}*K}~#"K}*I}|+"I}> 2"<}!>}454!]:[}#/!&$*ͳ$>$*:ͳ*>*$-Mͳ#.>-$\̳ͳ *W}++!"W}ö:00!{~Gwog:00! !*|F#N#Nͩ# x ͩr"}2}́ *}#"} | ͩ ͩ>2|:}ʆ2}2d}GW2}͸~"d͸U͸~"[2}~,ʀ͸t#*}c:|ʱo&##h6#|Gw#¨*}s#r:|#:}+~":}  !e}q~!| w !u}rimproper input - reenter $c{|I##hp#q#w x?s#rc͉xd! 6w#w{DM ͉ {DM͉*}DM*}}|ڡODF#N# "}ͬgoͦ Oͩo&ͦo&}2o&E{2xn&}!9> O r"}>2}y2}w# +2}2}M )+@-C>2}M0@.r:}/2}yµM0H:}=2}`EʻeʻY҉yGʧ :}2}ңxç:}ڵ:}<2}MHyM ʻG-_xMYGMYOxG{G:}@*}wɯ2}y2}M+1-4>2}1)DM)) O MY%:}Hz/W{/_s#r:}=2}~#0:?^#V* }||~!d}N q!e} ^!|!u} n&*}"}*}!4#é!DE͗<́|EX!CEô×!͗â"͗ấ*}2́|8 Ẃ!IEZ"}WEX́%IE<*}^w#Vw* }|!"~>2~zW{_!~5ʖ*~~ |g}o"~*~|g}o"~i*~*~DM*};͠"}*}"}BN|>>>)=; h"};p#z  *} "}"}}2} è}*}$ ~#$*} } w#, m}~#DF*}r+s"}:}= | !}~@w "})|}>(>NF|ʪ~ª#~#ʩG*}:ʪ́ 6#> 6 #=°x:Ҫw#2)~U .2)~U ~" ~! ~"~xҩw#p~|©*}!DM!:+ wA Q>w:)~|.i# b7*‚:~>*҂>2)~6?#`ڎ{Ҏ_:ʩ*ʩ?ʢw#:~ڸ:~ĽIF>?ÝF*})}w#w*}*}}O|Gr# x*}*}#{z"}2*~5>2~̈́2~́C:*~,*}!~w:*~@*}!~w͗2~̈́2~͗́|*}!:~!~w<ͽMÉ|EXm} s#rm} ^#VzFU"}*})} ^#V"} *}"}!9"}è} Y:}RB=7"RU7"|IR7"+DM*}^*}{o>g+{z_yW!*} s#r!}~w"}*}"} ́ұ!!9"};#*͗;#*͗;#+͗́!!9"};#+͗;#+×*}*}s#rͨ*}!0! ~#~!}>w:}2+~e!+~5wͲQ:}2}*}+"}*}"}!}~wҗ͠"}.:}.*}~7 ͅ *}|ʩRE7"!9"}*}*}#{z"}:}. *}n&:}7 ͠"}.!|ͩ ,5 +Gy2 p#*}|̅|!",~ `ͩ"`!3~6,!0~6!|"1~Ã23~!|"1~20~:3~ €ͅ ÿͩ!3~ʪ ʷ*1~w#"1~!0~~ :s#r ~#fopF#NyOxʓL*}hs#rr#sÓͅ#wz‰ͅͅ  L>":s#r*}| ͅ  !}~ЇwWR7"ͨ*}*}{_zW{z<Ͳ=ͨ!}>w *}*}|DW7"G:>}x6 *}|N*}|ER7"+"}]*}"}:}{.*}! N#F p+q*}w!}>w!9"}}6 :>}ک>"66|:>}>"6*v *X :>}>,6:>}>"66|:>}>"6 *v  *X :>}6*}|' ++" > 6+| > 6> 6 *}!0! w#w*}+"}!}~w *}*}|EFm} ^w#VwzCU>""}ͨ ͨ} w#wF!ù })~#fok *4~#"4~{zҦ m} ^w#VwzDU>""}ͨͯÔ !9"}!̈́͗<FR7"*}"6~!̈́͗2~̈́*} 6?##6?!"8~_*}~ʷ!=_"}<EX]"}<EX##FN͗%"`*}O yŷ "~##"!"~#""*8~"8~!F2~*8~)0"*})%PY)% |}"##h":~7%?%?%͍%͍%*:~! 9SLz"|")%PY)%y_xW"xʼ"¼"# x¯"͍%͍%""ɯ>)%ʼ"7ü")%ʼ"7?ü"zü"N#Fy"x+~%|#~ԝ$~ws#r)%*#n&͍%AC!h7%q++*zSS)%yx`#PY##h"<~7%BK?%͍%*<~|)%++͍%zSS)%yOxG# ##h">~7%BK?%͍%*>~|~Ý$DMx%$z%$|~#+#͍%!)%yOxG+$yx$PYh"@~7%BK?%͍%*@~SS!"@~$!>}~2B~w2|j$v *|&##hxw#q#|?%:B~2>} !|4^w|~ԝ$)%ʛ$a~Ҕ$~_w# xŠ$)%! h7%BK?%++"E~|$SS!"C~!%)%!%`i ##h"C~7% x %G*E~p#z%!%?%*E~+|"E~ %͍%*C~|DM~G#N#zw#s#xP%@i%E%yb%Ow# Y%yOw#w#w#w# i%^#V* }||~!9 %ʻ%~#fo"##%%~#%=œ%`i"G~^#V* }|%*G~w#w}%&>&>2L~!\~"z~!9N#F# y2Q~G&2I~+~+ng# *z~s#r#"z~DM:I~=&&+~+ng# :L~_ "R~h"T~*R~"X~)"V~*T~+F+N ##6# x…&~#fo#:L~_ og"Z~:Q~&2I~*z~+V+^"z~&*X~*Z~"X~*V~+r+s"V~*J~+"J~|¾&#~#fo#)og"Z~:I~=­&*T~*G~s#r:Q~= 'D2DH2!"|͖*   =""6#}|BD!"| "}00-!~G#~ }q+ph#1.9(Portions (c) 1983, 1984 Digital Research( The rest is (c) 1984 Steven L. Sanders a:startup.dbB0C0B1C1B2C2B3C3B4C4B6C6B7C7=8  < M A I L I N G L I S T D A T A B A S E v : Copyright (c) Sept 1984 by Steve Sanders 1 M A I L I N G L I S T D A T A B A S E v  M   =$DB.COM (c) 1984 by Steven L. SandersReading file A:STARTUP.DB ...C This program is part of a FREEWARE effort by the author.C I have spent many hours writing, improving, and changingC this program to get it where it is now. If you use thisC program on a regular basis and appreciate the time andC effort involved to create, please send a check for $15.00C to: Steve Sanders 14 Cypress Drive Palm Harbor, FL 33563 [hit any key]&Can this Kaypro display inverse video?:::: (Y)es or (N)o :::> YYesNNo*If Kaypro 10 - do you have a Legacy clock?:::: (Y)es or (No) :::> YYesNNo%Enter drive and filename of data fileor = b:database.dat- [______________]B:DATABASE.DATData drive and filename is --> Data drive and filename is --> & Current data drive and filename -->  *I will now create the A:STARTUP.DB file. Do you want % to be used as the auto-default file?es or o : NNoYYes3 [ creating A:STARTUP.DB ] There is no  file currently on disk.; You MUST use option 'A' first, and add new member. info before using the other options. [ press any key ]8 Enter today's date (MM/DD/YY) [________]M A I N M E N U=================,   Current data file --> 4 Add new member to database.5 Change existing member data.1 Delete a current member.< Change current data drive/filename.7 List current database members.> MAIL - generate labels (All members).= Scan database (print single lables).2 Telephone number roladex.6 QUIT - exit & return to CP/M.1  Enter your choice [ ]ACDFLMSTQ ENTER NEW MEMBER DATA ENTER NEW MEMBER DATA7Enter Company (c/r to quit) [_________________________](Enter first name .......... [__________]2Last name ................. [____________________]7Street address ............ [_________________________]2City ...................... [____________________] State ..................... [__](Zip code .................. [__________]*Business phone ............ [____________]You have entered the following: Company: Name: Address: City, St: ,  Zip: Bus phone: 1[ es = add the info o = re-enter info ] YN Company: Name: Address: City, St: 0Member is currently listed in database as shown.0================================================ CHANGE MEMBER DATA CHANGE MEMBER DATA7Enter company (c/r to quit) [_________________________](Enter first name .......... [__________]2Enter last name ........... [____________________]1. Company name: 2. First name: 3. Last name: 4. Address: 5. City: 6. State: 7. Zip code: 8. Business phone: , Enter field (1-8) to change (c/r=quit): :Enter company name ........... [_________________________]+Enter first name ............. [__________]5Enter last name .............. [____________________]:Enter address ................ [_________________________]5Enter City ................... [____________________]#Enter state .................. [__]+Enter zip code ............... [__________]-Enter business phone ......... [____________]'Requested member not found in database. DELETE EXISTING MEMBER DELETE EXISTING MEMBER7Enter company (c/r to quit) [_________________________](Enter first name .......... [__________]2Enter last name ........... [____________________]Company name: Name: Address: City, St, zip: , Business phone: Date entered: 5[ es = delete o = search for another match ] NY+Requested member not found in the database. CHANGE DATA DRIVE/FILENAME CHANGE DATA DRIVE/FILENAME5Enter new data drive and filename (i.e. B:MYDATA.DAT)3or a leaves data drive/filename unchanged. [______________] & Current data drive and filename -->  #New data drive and filename is -->  LIST DATABASE MEMBERS LIST DATABASE MEMBERS-For an alphabetically sorted listing, run the)SORT.COM utility on your data file first.1. List by company name only.&2. List by company, name, and address..3. List entire database record of each member." Enter your choice (c/r=quit) [ ]2This option will list ALL the database members by: Company name(LIST TO PRINTER INSTEAD OF CRT? y/n > YN.This option will list ALL database members by:- Company name, firstname, lastname, address'LIST TO PRINTER INSTEAD OF CRT? y/n > YN0This option will list the entire record for eachmember of the database.(LIST TO PRINTER INSTEAD OF CRT? y/n > YNMEMB ER LISTING as of # page#MEMBER LISTING as of # page#uit or any key to continue,  ,  ,  Business phone: Date entered: ,  Business phone: Date entered: %[ End Of File to continue ] GENERATE MAILING LABELS GENERATE MAILING LABELS;Be sure that you have run SORT.COM first if an alphabetical:print-out is desired. This option prints ALL the members.0[ Press to print sample for alignment ]ACME EQUIPMENT SUPPLY CO. JOHN JOHNSON475 EAST MAIN STREETANYWHERE, USA 000006es if aligned properly and ready to begin printing,3o if you desire another sample for alignment, oruit and return to menu. :::::: (Y/N/Q) ::::> QNY Now printing out mailing labels. >> Be sure printer is on-line <<!Enter --> to abort printing.A[ PRINTING aborted ],  # SCAN DATABASE - SEARCH FOR MEMBER !SCAN DATABASE - SEARCH FOR MEMBER7Enter company (c/r to quit) [_________________________](Enter first name .......... [__________]2Enter last name ........... [____________________]Company: Name: Address: City, St, zip: , Business phone: Date entered: G[ ont search, enerate label,

rint info, or eturn to MENU ] CRPCompany: Name: Address: City, St, zip: , Business phone: Date entered: G, #[ No such member in the database. ] TELEPHONE NUMBER ROLADEX TELEPHONE NUMBER ROLADEX=This option will list names, companies, and phone numbers for6any given beginning letter ( A - Z ) of the last name.'Enter lastname letter to scan ..... [_] PHONE ROLADEX FOR LETTER '' PHONE ROLADEX FOR LETTER ''uit or any key to continue: ,  Phone: &[ End of file - to continue ]( DB.COM (c) 1984 by Steven L. Sanders , DB.COM (c) 1984 by Steven L. Sanders::SundayMondayTuesday WednesdayThursdayFridaySaturday//19001January02February03March04April05May06June07July08August09 September10October11November12December++++ ERROR ++++ Error Code "" occurred in line number REEF)Attempt to read past end of a fixed file..Have you been using Wordstar on the data file?DWME8Operating system error while creating or appending file./Is there FREE space available on the data disk?|!'"}"}!'"}|~!'"~~!'"~!'"~!'"!"~*~1#~"!"~*~1#~"!"~*~1#~"!"~*~1#~"! "~*~1#~"!1#~"!"~*~1#~"!"~*~1#~"! "~*~1#~"*~!'B"~"*~!'B"~"*~!'B"~"*~!'B"~"*~!'B"~"*~!'B"~"*~!(B"~"*~!(B"~"*~! (B"~"*~!(B"~"*~!(B"~"*~!(B"~"*~!(B"~"*~!(B"~"*~!#(B"~"~!(("~!+("!"~!"~*~"~*~"~*~"~*~"~*|~-(B"~"~!k("*~!(B"*~B"!(B"*|~B"!(B"*~B"!(B"*~B"~"*~!(B"*~B"~"3I>!~͖%*~!H)B"*~ 1#B"*~ 1#B"y*~*~lI>!~͖%*~}#P{ozg!\ "~*~͡*~y*~*~ËI!!Hy*~y*~*~ëI*~y*~͊U*~͊*~*~I*~͊*~͊*~͊*~͊*~*~J!"~I!"~I*~#"~I*~#"~I*~*~@J!"~1J!"~#J*~#"~߱J*~#"~J*~*~yJ!"~jJ!"~\J*~#"~ϊUJ*~#"~LJ*~*~!y͠*~t!|ʶJ*~͊!K)6I"~UUU!q)6I"~CJ"~x͎I"~UU!)͊U!)͊!*͊!`*͊!*͊U!*͊UU!/+y"~oI"~UUUU!G+6I"~UUU!o+6I"~*~y"~*~1#w$!+͈"aK!+͊*~"~ͮI"~ÆK*~1#w$!+͈"wK-K!+͊*~"~LoI"~UUUU!+6I"~UUU!+6I"~*~y"~*~1#w$!+͈"K!+͊*~"~L*~1#w$!+͈"KõK!+͊*~"~oI"~*~|LLUUUUU!+6I"~!,6I"~UU!2,y!"~[L*~y*~#"~NL5z*~}#{zxLL*~*~͈"¤L!a,"U*q,B"6I"~L*~w$"U*,B"6I"~*~|M*~*~B"*~B"*~B"!,B"*~B"!,B"*B"!,B"*~B"*~B"͊ J"~*~|(MpNoI"~UUU!,6I"~UUU*-B"!%-B"6I"~UUU!L-6I"~*~y"~*~1#w$!^-͈"¥M!a-͊!e-"M*~1#w$!g-͈"ʻMtM!j-͊UUU!o-y*~t!|M*~!!!>͏!*~*~!*!k J"~*t!|pNoI"~UU*~͊*-B"!-B"͊UU!-͊!.͊UUU!C.y"~*~*~{oz†NbpNoI"~UUUUU!`.y!"~÷N*~y*~#"~ҪN5z*~}#++++++++|NpN*~"oI"~UU!.6I"~!.6I"~*~|HOUU*!.B"*B"!.B"*B"!.B"* B"6I"~UaOUU*.B"6I"~UU!.͊!/͊!O/͊!/͊!/͊!/͊!90͊!x0͊!0͊U*~!0B"y*~*~B"y" * 1#w$͊* 1#w$!1͈"OÒP* 1#w$!1͈"OV* 1#w$!1͈" P\* 1#w$! 1͈"!PH_* 1#w$!#1͈"7Pp`* 1#w$!&1͈"MP8g* 1#w$!)1͈"cPi* 1#w$!,1͈"yPm* 1#w$!/1͈"PpNoI"~UU*~|ʽP*~!21B"*~B"͊P!K1͊U*~͊!b1y!"~P*~y*~#"~P5z*~!1͈"Q N*~}#{zQÒP*~w$"!1y!"~=Q*~y*~#"~0Q5z*~}# {z`Q*~y!Q*~!1͈"vQ*~y!Q*~w$"!1y!"~ÞQ*~y*~#"~ґQ5z*~}#{zQ*~yÂQ*~w$"!1y!"~Q*~y*~#"~Q5z*~}#{z R*~yQ*~w$"!62y!"~4R*~y*~#"~'R5z*~}#{zWR*~yR*~w$"!j2y*~y*~y*~y5z*~}#{zR*~ycR*~w$"!2y!"~ÿR*~y*~#"~ҲR5z*~}# {zR*~yãR*~w$"!2y!"~ S*~y*~#"~R5z*~}# {z-S*~yR*~w$"oI"~UU!2͊UU*3B"͊*3B"*~B"*B"͊*3B"͊*-3B"!;3B"*B"*~B"!?3B"*B"͊*G3B"͊UU!U3y*~y"~*~1#w$͊*~1#w$!3͈"ST*~1#w$!3͈"TSÒP*t!|"TÇT͏!"!*;*͛*͛*͛*͛*͛*͛*͛*͛*!k ÒP*!!!>!!9U!"1U!*;! ͭ!"ͭ!$ͭ!&ͭ!(ͭ!*ͭ!,ͭ!.ͭ!0ͭͼ*"*͈"*$*͈"*&*͈"'UÄU*#"îT*~|®T!*;*͛*͛*͛*͛*͛*͛*͛*͛*!k ÒPoI"~UUU*~͊*3B"͊*3B"*~B"*B"͊*3B"͊*3B"*~B"*B"͊UU!3͊!3͊ J"~ÒPoI"~UU*~|+V*~!*4B"*~B"͊1V!@4͊U!T4y!"~PV*~y*~#"~CV5z*~!4͈"jVN*~}#{z}VV*~w$2"!4y!"~åV*~y*~#"~ҘV5z*~}# {zV*~yÉV*~!4͈"V*~yÉV*~w$4"!4y!"~W*~y*~#"~V5z*~}#{z)W*~yV*~w$6"*!!!>!![!"W!*;! ͭ!"ͭ!$ͭ!&ͭ!(ͭ!*ͭ!,ͭ!.ͭ!0ͭͼ*"*4͈"*$*6͈"* *2͈"WW*#"\W*~|\WoI"~U* 4B"͊*"5B"͊*$5B"͊*&.5B"͊*(C5B"͊**X5B"͊*,m5B"͊*.5B"͊U!5y*~y"8*8 {oz}X!k N*81#:"*:y*:"8*8+|*8{zҷXYX*8+)X~#foX3YYYMZZZ\[oI"~UU*~!5B"y!"~Y*~y*~#"~X5z*~}#{z!YX*~w$ "ͺ[WoI"~UU*~!6B"y!"~bY*~y*~#"~UY5z*~}# {zY3Y*~w$""ͺ[WoI"~UU*~!.6B"y!"~Y*~y*~#"~ҳY5z*~}#{zYÑY*~w$$"ͺ[WoI"~UU*~!e6B"y!"~Z*~y*~#"~Z5z*~}#{z;ZY*~w$&"ͺ[WoI"~UU*~!6B"y!"~|Z*~y*~#"~oZ5z*~}#{zZMZ*~w$("ͺ[WoI"~UU*~!6B"y*~y*~y*~y5z*~}#{zZëZ*~w$*"ͺ[WoI"~UU*~!6B"y!"~-[*~y*~#"~ [5z*~}# {zJ[Z*~w$,"ͺ[WoI"~UU*~!*7B"y!"~Ë[*~y*~#"~~[5z*~}# {z[\[*~w$."ͺ[W!*;* ͛*"͛*$͛*&͛*(͛**͛*,͛*.͛*0U*~͊!Y76I"~ J"~!k NoI"~UU*~|J\*~!7B"*~B"͊P\!7͊U!7y!"~o\*~y*~#"~b\5z*~!7͈"‰\N*~}#{z\\*~w$<"!7y!"~\*~y*~#"~ҷ\5z*~}# {z\*~yè\*~!8͈"\*~yè\*~w$>"!8y!"~%]*~y*~#"~]5z*~}#{zH]*~y ]*~w$@"*!!!>!! _!"]!*;! ͭ!"ͭ!$ͭ!&ͭ!(ͭ!*ͭ!,ͭ!.ͭ!0ͭͼ*"*>͈"*$*@͈"* *<͈"]^*#"{]*~|{]oI"~U* O8B"͊*"a8B"*~B"*$B"͊*&s8B"͊*(8B"!8B"**B"*~B"*,B"͊*.8B"͊*08B"͊U!8y*~y"~*~1#w$͊*~1#w$!8͈"¿^*#"{]*~1#w$!8͈"^Ê^!*;*~͛*~͛*~͛*~͛*~͛*~͛*~͛*~͛*~!k NoI"~U*~͊!86I"~ J"~!k NoI"~UU*~|s_*~!)9B"*~B"͊y_!G9͊UU!c9͊U!9͊U!9y!"~í_*~y*~#"~Ҡ_5z*~*~͈"_N*~}#{z_Î_*~w$"*~|?`*~͊ͮI"~*~*~B"*~B"!9B"*~B"!9B"*B"!#:B"*~B"*~B"͊*~*~{ozU`oI"~UU*':B"͊ J"~N!"B!"D!"FoI"~UU*~|ʭ`*~!L:B"*~B"͊ó`!e:͊U!|:͊!:͊UU!:͊!:͊!;͊UU*~!M;B"y*~y*~y*~y"8*8 {ozaN*81#:"*:y*:"8*8+|*8{zQa`*8+)_a~#foeaacboI"~UU!q;͊U!;͊UU!;y*~y"~*~1#w$͊*~1#w$!;͈"a>!"Bb*~1#w$!;͈"aÌa!"BboI"~UU!;͊U!!<͊UU!P!"Db*~1#w$!|<͈"Zb b!"DboI"~UU!<͊U!<͊UU!!"Fb*~1#w$!<͈"bÊb!"Fb!"H!"J!"L!"N!"P!"R!"T*B++|*D++|*F++|@coI"~U_c*!!ff!*;!ͭ!ͭ!ͭ!ͭ!ͭ!ͭ!ͭ!ͭ!0ͭͼ**~͈"c*#"Æc*J7{oz*N {oz*R {ozWd*~͊*T#"T*7=B"!O=B"y*TLUU!"J!"N!"R*H {oz*L++|*P+++|dU!t=y"~*~Q{oz*~q{ozd!k NdoI"~UU!"H!"L!"P*B+|e*͊*J#"J*#"Æc*B++|$e*͊*H#"H*#"Æc*D+|†e*͊**~B"*B"͊*͊*!=B"*B"!=B"*B"͊UU*R#"R*#"Æc*D++|e*͊**~B"*B"͊*͊*!=B"*B"!=B"*B"͊UU*P#"P*#"Æc*F+|cf*͊**~B"*B"͊*͊*!=B"*B"!=B"*B"͊*=B"͊*0=B"͊UU*#"*N#"NÆc*F++|f*͊**~B"*B"͊*͊*!=B"*B"!=B"*B"͊*=B"͊*0=B"͊UU*#"*L#"LÆc*#"Æc*~|†c*B+|*D+|*F+|g>U*~=B"y"~!k NoI"~UU*~|cg*~!>B"*~B"͊ig!5>͊UU!N>͊!>͊U*~͊!>y"~>U!>͊!?͊!"?͊!8?͊U>oI"~UU!M?͊U!?͊U!?͊UU!?y*~y"~*~1#w$͊*~1#w$!?͈"hN*~1#w$!?͈",hÐg*~1#w$!?͈"BhgoI"~UUU!@6I"~UU!"@6I"~UUU!D@6I"~!"*!!!>!!i>ûi!*;!ͭ!ͭ!ͭ!ͭ!ͭ!ͭ!ͭ!ͭ!0ͭͼJiͶ"V*V1#w$!g@͈"Ji>oI"~*~͊UUUU!j@6I"~!1#͊ J"~!k Nͭ|h**~͈"ii*#"êhU*͊**~B"*B"͊*͊*!@B"*B"!@B"*B"͊U*#"êh*~|ªh>!k NoI"~UU*~|i*~!@B"*~B"͊j!@͊U!@y!"~!j*~y*~#"~j5z*~!A͈";jN*~}#{zNji*~w$X"! Ay!"~vj*~y*~#"~ij5z*~}# {zj*~yZj*~!4A͈"¯j*~yZj*~w$Z"!6Ay!"~j*~y*~#"~j5z*~}#{zj*~yûj*~w$\"*!!!>!!m!"ðk!*;! ͭ!"ͭ!$ͭ!&ͭ!(ͭ!*ͭ!,ͭ!.ͭ!0ͭͼ*"*Z͈"*$*\͈"* *X͈"Ҧkøk*#"-k*~|-koI"~U* jAB"͊*"|AB"*~B"*$B"͊*&AB"͊*(AB"!AB"**B"*~B"*,B"͊*.AB"͊*0AB"͊UU!Ay*~y"~*~1#w$͊*~1#w$!!B͈"tl*#"-k*~1#w$!$B͈"l!k N*~1#w$!'B͈"+m>U* *BB"͊*"!k N*~1#w$!B͈"™m>U* ͊*"*~B"*$B"͊*&͊*(!BB"**B"*~B"*,B"͊U>!k N?lUU*~͊!B6I"~CJ"~!k NoI"~UU*~|m*~!BB"*~B"͊m!B͊UU!B͊!9C͊UU*~!qCB"y*~y*~y"~*~A}|*~z{zIn#n*~1#w$^"*^͊*!!!>!!p!"H!"oI"~U*~|ʾn*~!CB"*^B"!CB"*~B"͊n*^CB"!CB"͊UUo!*;! ͭ!"ͭ!$ͭ!&ͭ!(ͭ!*ͭ!,ͭ!.ͭ!0ͭͼ*"*~͈"6o*#"n*H {ozšoU!Cy"~*~Q{oz*~q{oz҅o!k NÚooI"~UUU!"H*$!G#*^͈"o*$!CB"*"B"!CB"* B"!DB"*.B"͊*H#"H*#"n*#"n*~|nU*~DB"y"~!k N*~|Lp*~*~B"*~B"!8DB"*~B"͊Yp*~!bDB"͊U͠ ͝*~*~{ozsp! !!!`%!!b͕Ãq!y!j͕!{!r͕!j!!r!!r!!j!b!j!!b!j!b!j! !r!!r!!j! !j{ozg!z͕!b*`)))!z͐!!b!b͕! !bp*`)))͇!͆!0+1#*`)))͇!0+1#B"!DB"*`)))͇!0+1#B"*`)))͇!0+1#B"!DB"*`)))͇!0+1#B"*`)))͇!0+1#B""*`)))͇!™r!D"*`)))͇!¼r!D"*`)))͇!r!D"*`)))͇!s!D"*`)))͇!%s!D"*`)))͇!Hs!D"*`)))͇!ks!D"*` )))͇!0+1#*` )))͇!0+1#B"!DB"*`)))͇!0+1#B"*`)))͇!0+1#B"!DB"*` )))͇!0+1#B"*` )))͇!0+1#B""*` )))͇!0+1#DB"*` )))͇!0+1#B" "*`)))͇!0+1#!D͈"t*`)))͇!0+1#"#u*`)))͇!0+1#*`)))͇!0+1#B""*` )))͇!0+1#*` )))͇!0+1#B"!D͈"uu!D"*` )))͇!0+1#*` )))͇!0+1#B"!D͈"u!D"*` )))͇!0+1#*` )))͇!0+1#B"!D͈"v!E"*` )))͇!0+1#*` )))͇!0+1#B"! E͈"kv! E"*` )))͇!0+1#*` )))͇!0+1#B"!E͈"½v!E"*` )))͇!0+1#*` )))͇!0+1#B"!E͈"w!!E"*` )))͇!0+1#*` )))͇!0+1#B"!'E͈"aw!+E"*` )))͇!0+1#*` )))͇!0+1#B"!1E͈"³w!5E"*` )))͇!0+1#*` )))͇!0+1#B"!=E͈"x!AE"*` )))͇!0+1#*` )))͇!0+1#B"!LE͈"Wx!PE"*` )))͇!0+1#*` )))͇!0+1#B"!YE͈"©x!]E"*` )))͇!0+1#*` )))͇!0+1#B"!gE͈"x!kE"*~"~*~!!!>!!;y!!~͡!~͡!ͭͼ!k *!uE͈"Wy*~"~]y*~"~*~*~{ozg|{yͮI"~bpL*~}/o|/g*~{ozg|ʜyͮI"~L*~|­y͎I"~LU*~!wEB"͊!Eyͳy!EyͨLͳ!E͈"ͳ!E͈"z!E͊!E͊ͳ!F͈"ͳ!F͈"/z!F͊!WF͊͠ ͝**~͈"Hz*~y**~͈"Xzkz*~"*~""**~{oz„zz**~{oz—zz**~{ozªz&{* }|*~{zzkz*1#*B""*1#ykz*}#+|zkz*!*}#+#"*~y*~y*~ykz*"*~"U͠ ͝ >y ((( ((}|L@0246xQL@0247QL@0248.QL@0249>QL@0250NRL@0251^*RL@0252nRL@0253~AE"*` )))͇!0+1#*` )))͇!0+1#B"!LE͈"Wx!PE"*` )))͇!0+1#*` )))͇!0+1#B"!YE͈"©x!]E"*` )))͇!0+1#*` )))͇!0+1#B"!gE͈"x!kE"*~" D B v1.9 A Name/Address/Phone/Mailing Database by Steven L. Sanders All rights reserved (c) 21-Jan-85 ================================================================= Thi softwar i hereb place int th publi b th autho fo al t FREEL use copy o exchange Th autho assume n liabilitie fo an damage cause b th us o misus o thi program Portion o th objec cod ar (c 1982 198 Digita Research th sourc cod i Cbasi compile i (c 198 b Steven L. Sanders. ================================================================= "What's a DB ??" ɠ wa happ Kaypr owne bu wa constantl frustrate wit m attempt t creat 'decent databas forma wit PERFEC FILE - so mad DB D doe no requir multitud o .OV o .OV file t operate jus th DBxx.CO an startu file called STARTUP.DB, and your database file. DB19.CO͠ i KAYPRO-ORIENTED fo eithe th earl non-vide capabl model lik th KPI an KP (pr '84 o an mode Kaypr 1 o newe '8 models Fo eithe KP1 o newe '8 mode owners D  ha a excellen vide screen I yo ar tryin t ru thi progra o non-Kaypr machine goo luck Unles i ca imitat a ADM-3 termina th scree call ar useless for you. DB1 i littl mor BUSINESS ORIENTED no the it' predecessor lik DB18 17 etc.. D no ha COMPAN NAM fiel an n longe ha Hom phon field Yo ca als no prin singl label wit th SCA optio o label fo al members with the standard 'M'ail option. Onc yo hav initiall installe DB.CO i wil 'know ho t com u al b itsel th nex time I create fil calle STARTUP.D  whic hold al th value fo video/no-video clock/no-clock an th nam o th defaul databas fil an th drive where it is located. Th objec cod i generate fro Digita Research' CB80/LK8 compiler/linke fo Cbasic I i fas an ver clean jus tak loo a you database.da fil an yo wil se th neat easy- to-understan structur i uses Al field ar seperate b quotatio mark an comma an al alph character ar alway converted to UPPER CASE automatically. { Labels, Labels, Labels } T us an o DB' label-generatin option yo nee t hav stoc o standar 1-u label 3-1/2 15/16 continuou ) D does not support any other label sizes! The mailing labels are generated to look like so: _______________________________ | | | Company name | | First name, last name | | Street Address | | City, State, Zip | | | ------------------------------- { Data Record Format } The format of the data record is: "FIRM","FIRST","LAST","ADDRESS","CITY","STATE","ZIP","PHONE",\ "DATE ENTERED" Thi i fixe recor wit lengt o 128 I usin Wordsta i non-documen mod yo wil fin th lin goe ou t colum 12 an the drop t th nex line Th CR/L pai actuall count a 12 bu i invisibl bu ABSOLUTEL NECESSARY I yo d alte yo database.da fil - B CAREFUL yo mus maintai th lengt o 12 o eac an ever line Bes t jus us D t ente an delet membe records I yo hav delete larg numbe o member the us Wordstar' CTRL- t delet th whol line of the file containing the nulls. Example: This is what a deleted entry looks like "","","","","","","","","" Al th field hav bee replace wit nul ("" strin chrs Afte runnin SORT al o thes entrie wil b brough t th very top of the file for easy removal. { Phone ROLADEX } Th ROLADEؠ optio stil key i o th firs lette o th lastnam entry I wil sho th followin fo eac matchin entry: LASTNAME, FIRSTNAME FIRMNAME PHONE NUMBER Ther i n rea nee fo an furthe documentatio a D i ver simpl t operat an i completel menu-driven Jus thin befor堠 pressin a optio ke a al one-ke input ar automatically acted upon very quickly! { Problems, bugs, complaints??? } don' wan t hea abou them Onl kidding addres you mai to: STEVEN L. SANDERS % Tampa Bay Kaypro User's Group 14 Cypress Drive Palm Harbor, FL 33563 (813) 937-7249 voice (9a-5p Eastern ONLY!) Modem'ers can leave E-MAIL on any of these (813) 937-3608 300/1200 24 hrs (813) 937-6829 300/1200 24 hrs (404) 632-2109 300/1200 24 hrs X } Th ROLADEؠ optio stil key i o th firs lette o th lastnam entry I wil sho th followin fo eac matchin entry: LASTNAME, FIRSTNAME FIRMNAME PHONE NUMBER Ther i n rea nee fo an furthe documentatio a D i ver simpl t operat an i completel menu-driven Jus thin befor堠 pressin a optio ke a al one-ke input ar automatically acted upon very quickly! { Problems, bugs, complaints??? } don' wan t hea abou them Onl kidding addres you mai to: STEVEN L. SANDERS % Tampa Bay Kaypro User's Group 14 Cypress Drive Palm Harbor, FL 33563 (813) 937-7249 voice (9a-5p Eastern ONLY!) Modem'ers can leave E-MAIL on any of these (813) 937-3608 ͫCopyright (C) 1984 BORLAND IncA KAYPRO 10al selectedP= ERC1B1~7#~=% o&ͦoͦܐԩͣ}!!"8~#(}:$= +*!Z!*B!!:(=2!Z: <2!!!:O::O:!*B! !45(!.+/ 0y0( d!kZ!{Z͈͈o&  :(y ͠|( *"x2y( >28!?"9!!>2 :D]SXN]D [ (!e}̈́A8Q0G: x@!\w# (   yV. V!h6# (*(.(!8}(*(̈́w#>?> w#a{ |͒}͛Ɛ'@'7||}>"C"6# ""͐ͩ*B"[R5*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#E͊w}8uRB0 >R@RR!+ͨ z R!+ͨ z <!+ͨ z <!+ͨ z <!#ͨ z <!+ͨ z T]KB!z> S>))0 = |JJDMgo>jB0 7?= H\<z5+)+<z {0Gɯgo||H}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'ͬͬdͬ ͬ} wͦWͧ _}8(8J`9{T]=o`9y w >uJ u` }>(; xQ }} ˸T}ٕ(0D=C ,= ( [ 0%D , 7 ͏ ?(8u x O - ; 8˸x X ,-xG}; }م 9; .>#n0[ D = - nx P ,-(-˸G,-; }ٕ? 9.>͏ 8u ?= u+-(>O 0u O 8͏ ?x P , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx(ͼ ?}ٽÏ }ց; <(; 7D = |٤g{٣_z٢Wy١Ox٠GD u J }x>uu}ƀ/ƀo; -J }0W-J W,}l˸ͨ 8 ; ` x( -ͨ 8J -ͨ 8,J }l8;*!` ! >u` ` u--- J ,,,-xGg?+2n*8t z~,->uxua}.; OJ , ; !U >,k- o&0%,` }g; }؉}颋.:}8c~I$I~L*kٷx˸; }0G,͙<},-(-J ! >0 a` o8 Oþ >um.`1pF,t6|!wS<.z}[|%FXc~ur1}Oٯx(<˸ͨ 8; !~Jͨ 0O!><ͨ 8 =  7 <` O ; 7 0 W-J OT0 j oD,:j !I}袋.}8c~I$I~L!>u` ` 77 ` = O nf^VNF!DLT\I!!53!r1!\!> x #-= o˸xO(- }(x>8(C ,C `iM!>u|; |J>| )=|(DMbo˸ͦ88ͦx(0 8> Mx(>-Ͳ{(ay(Ͱͦ \z(>.Ͳ (Ͱ ~ͦ{>EͲ>+|(|Dg>-Ͳ|/ 0:p# ~# +>0w#,-  60#J˸}րogM| .(C = ~> x0w#xG%P %P ZJDM%P = _~65i+~hìx-Sx9?+{Η@}|C C gZJDM0D ,7}o˸  #yO!@9i&   # w# /w# w#!9! E9!!9~(+F͊!"9!(#>2*Ͳ"|>" :( ͆ *6#w*6#6 !\$![ (̈́( #:~CONTRMKBDLSTAUXUSR>2$*#~ Ͷ$*:> >w###6  #6++p>2S-$Ͷ:*6###ww#w$w#w: ##N#F*B> w#w#[s#r>2S$Ͷ$*6 #-Nw#Fwq#p#6#w#w#w* :( ͒: *^ F* < >26"~͟*-w#ww#͟"~ <@*Ͳ!\  <ʮ!\$> >2*|>! * \$\<(!: [1Á\!(f"> 2:!<"F( #~#6e>!["N>!~8>O6*"w (=(&("( :(N 8y(~#x+% (6*#~[*#~ *~(h#"b=  8 J= B== ͯ}8= ͵}/ͭ !*###~-_~(4Q6*>2>*##w:>*##~*#~(E[ ( ( ( !][ ( ( ((w#(6!]~-#8~>7  [>OkͼMs #rkͼpX á[ [ (( #w(q*#~[ (  *##~6͜O$*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46͡> *:4^q}Ò*|(M|( M6-#͐ͦ[R8 (G> ͒C~͒#*ͦC!h !lTRUEFALSEͦ!9^#(~#(G~͒#> ͒> Ò "F![(#RR0*4#4> RR *4 #4(>>2$*V(/˖:(#~+ x y2!͵( =( X:(R*:(###~-_-͌X> :("͟"*^˞*V˖0 SRѷR8A* N#F#s#r$ 0})jS\*###w* N#FB ͟r+s> !T]>)j)0 0= UR!#U*^#V#N#F#^#V>">!2DM"~x(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>> SRѷR* s#r$ s#r"S"! N#FB(^x * 6#[<(H*! Kq#p##K[! *! 4 #4! x *$ *>w""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* 5KB!>u~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6# * *!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#VS>O"w2x2!"" @*>2"!"""!\Ͳ*: !~6go(\R*s#r_2x( s x(T]DMR0 -a%}̈́o*!~6o&͠|ͣ}%^C User break1:% I/O% Run-time% error ͒%, PC=[R"͍% Program aborted*1!͍!rS8Ͳ]L"$"&Ŕ*! *&! *$b!d*&!))))))*$!!d*&!))))))*$!n&!!*$!R!*&!|g}os""Ŕ ! *! *b!d*!))))))*!!d*!))))))*!n&!!*!R!*!}/o|/g|g}os""*Q!!ck*Q!!k}oE!*l!NE!**ͯ !**" " !d* !))))))* !n&!!* !R!* !|g}o!͛}2*&*z!!"*x!!"ŔB4b**͠Eʪ"!8!fb*f&! t*f&Q!a!a!a! a!a! a!a! a!a! a}oEʪ"*f&Q!a!a!a! a!a! a!a! a!a! a}oE#!b*+))))))*+*f&s***f&Rb*!"*!P͛E#!"*!"*!͛E#!"Å%*f&Q!a!aE`$*!R"*!ͯE]$!P"*!R"*!ͯE]$!"Å%*f&Q! a!aE$*!"*!P͛E$!"*!"*!͛E$!"Å%*f&Q! a!aE%*!"*!͛E%!"Å%*f&Q! a!aEK%*!R"*!ͯEH%!"Å%*f&! NEʅ%!"*!"*!͛Eʅ%!"*f&!NEʠ"ŔC4b!!5z &"vŔ*! *z! *xbŔ ! *z! *xb*v#ð%!d*z!))))))*x!n&!!*x!R!*z!|g}o!͛Eʣ&Ŕ*! *z! *xb"!!O5zM("t*!N*t!ON}o}oEʠ'*t!*!!d*))))))*tn&!͛Es'ŔB0!d*))))))*tn&!|g}o!|g}óC0bà'R!!d*))))))*tn&b*!a*t!Oa}o!b*!+))))))*t!+n&! a}oED(*t!*!!b*!+))))))*t!+n&Rb*t#÷&*!NE(!\!_5z("!!5zʷ("t**t!Eʣ(**tî(**tͯ *t#|(*#h(!!5z("v*vͤ&*v#(c!!ŔB0́ DDraw Options Menu b!!ŔB1́ (select from graphics mode) ́C1͐bŔ drawing: ́C0͐bŔ= 5 - toggle draw/erase 0 - toggle browse/draw mode͐bŔ8 R - toggle repeat/manual W - toggle wrap-around͐bŔ4 ^C - clear screen ^U - refresh screen͐bŔ9 T - text mode, ESC to exit B - start/stop box draw͐bŔ< L - start/stop line draw C - start/stop circle draw͐bŔ1 S - toggle status line ^F - fill region͐bŔ ^Q - quit DDraw͐bŔ8 +----------------------------------+͐bŔB2́8 | PRESS & RETURN TO DDRAW |͐bŔC2́8 +----------------------------------+͐bŔB0́ subpictures: ́C0bŔ3 to enter or display, follow command by 0, 1, or 2)͐bŔD ^D - save subpictures to disk D - load subpictures from disk͐bŔ< ^B - start/stop subpicture entry ^R - display subpicture͐bR͐bŔB0́ printing: ́C0bŔ2 +-----------+͐bŔL ^P - print bit image ^O - print graphics |7 8 9| (or arrow keys͐bŔO and text | \ | / | in text mode)͐bŔB0́ disk I/O: ́C0bŔ2 |4 ---+--- 6|͐bŔ= ^S - save screen ^L - load screen | / | \ |͐bŔ= ^D - save subpictures D - load subpictures |1 2 3|͐bŔ= +-----------+b!8!fb! }2f(!!ŔB0́ Filename: ́C0́B4b!+.bŔC4b! m!͛E-0!! =!yb!!d!gb!!b!gb!Sb!ͤ&!ͤ&!!ŔB0́ Filename: ́C0́B4b!+.bŔC4b! m!͛E0!! =!zb!!d!kb!!b!kb!Sb!"l! m!͛E1(1!ͤ&!ͤ&!!5zy1}2!!O5zn1}2ߚ!d*&))))))*ߚ&!s*ߚ&#31*&#1!!5z1}2!!P5z1}2ߚ!b*&+))))))*ߚ&+! s*ߚ&#Ù1*&#Ä1}2ޚ*ޚ&!|g}o!͛E2!"r2!"r*ޚ&!|g}o!͛E@2*r!@"r*ޚ&!|g}o!͛Ei2*r! "r*ޚ&!@|g}o!͛Eʒ2*r!"r![!b!!c!5zʪ3"v!Ͳ!!5zʏ3"t!d*v))))))*tn&!|g}o! ͧ"Ԛ*Ԛ1! *re.!Ͳ!d*v))))))*tn&!U|g}o"Ԛ*Ԛ1! *re.!Ͳ*t#2![!͐b*v#õ2!!!s!!!s!!!s!!!s!!!s!!!s!!!s!!!s!!!s!! !s!! !s!! !s!! !s!! !s!!!s!!!s![!!b!!5zv6"v!Ͳ!!O5z5"t!b*v!+))))))*t!+n&! NEw5! !!d*v))))))*tn&!|g}on&e.!Ͳø5! !b*v!+))))))*t!+n&e.!Ͳ*t#4![! !qb!Ͳ!!O5zX6"t! !!d*v))))))*tn&!|g}o! ͧn&e.!Ͳ*t#5![! !qb*v#4![!!b}2ͥ%͠Eʕ6!8!fb*f&(}2f*f&Q!7a!8a!9aE6*z!R"z*f&Q!7a!4a!1aE7*x!R"x*f&Q!9a!6a!3aEN7*x!"x*f&Q!1a!2a!3aE}7*z!"z*z!ͯEʖ7!c"zì7*z!c͛Eʬ7!"z*x!ͯE7!"x7*x!͛E7!"x*f&Q*&a! a!a! aEʕ6"""""**ͼ **ͼ **ͼ **ͼ ͳ  !͡!!͸E8**ͼ !͡49**ͼ ! !͡**ͼ ! !͡*͙*͙}!*!ͳ *͡*!ͳ *͡**ͼ ˸!͸**ͼ ˸!͸}oE49*z !͡*x !͡!L͌6*f&Q!LaEU:*z !͡*x !͡!!!!*l8*z"o*x"m!C͌6*f&Q!CaEO<*o*zR*o*zR*m*xR*m*xR!u͡!"q!u ͙"s*s*qtEO<*o*s*m*q}!*o*sR*m*q}!*o*s*m*qR}!*o*sR*m*qR}!*o*q*m*s}!*o*qR*m*s}!*o*q*m*sR}!*o*qR*m*sR}!*q!"q*q*q*s*s!uͼ ˸*q*q*s!R*s!R!uͼ ˸ͥEL<*s!R"s:*o"z*m"x*z"_*x"]!8!fb*f&Q!0!2kEʖ>*f&!0R"[!͌6*]*xRJ!!"a*f&!N*a! ͛}oE=Ŕb!.}2f*f&Q!a! a!a! a*a! ͇}oEʣ<*_*zRJ!!"c!(*[))))))))!)))*c*ae.l  *_*z͛Eʵ=*z"gû=*_"g*]*x͛E=*x"e=*]"e!*c5zʖ>"v!*a5zʍ>"t!(*[))))))))*v)))*t!d*v*g!!R))))))*t*e!!Rn&s*t#=*v#=*z"U*x"S!8!fb*f&Q!0!2kEʀA*f&!0R"Q!!(*Q))))))))!)))!n&5z5A"v!!(*Q))))))))!)))!n&5z,A"t*v*U!!R!ͯ*t*S!!R!Pͯ}oE#A*l!NEM@!d*v*U!!R))))))*t*S!!R!(*Q))))))))*v)))*tn&s#A!d*v*U!!R))))))*t*S!!R!d*v*U!!R))))))*t*S!!Rn&!(*Q))))))))*v)))*tn&|g}os*t#a?*v#?!(*Q))))))))!))) !!e.l oEʀA(!!ŔB0́ Save subpicture file: ́C0́B4b!+.bŔC4b! m!͛E-B!! .BLK=!yb!!(!gb!Sb(!!ŔB0́ Load subpicture file: ́C0́B4b!+.bŔC4b! m!͛EB!! .BLK=!zb!!(!kb!Sb!ͤ&!ͤ&*z"C*x"A!B͌6*f&Q!BaEC*x*AͯE8C*A"t*x"A*t"x*z*CͯEZC*C"t*z"C*t"z*C*z5zʍC"v*v*x}!*v*A}!*v#eC*A*x5zC"v*z*v}!*C*v}!*v#ØC"="?*?*=!}oEF!"7!"5!1!)*=s#r!1!)*?s#r*?*=*7*5a*f&Q! a!a! a}o}oEF͠ElD!8!fb!1*5)^#V"3!1*5!)^#V"1*5!!|g}o"5*3!͛*1*3!R!}o}oE8E*1*3!R!1*7)*3!Rs#r!1*7!)*1s#r!*7!|g}o"7*3!ͯ*1*3!!}o}oEʼE*1*3!!1*7)*3!s#r!1*7!)*1s#r!*7!|g}o"7*1!͛*1!R*3!}o}oEIF*1!R*3!1*7)*3s#r!1*7!)*1!Rs#r!*7!|g}o"7*1!cͯ*1!*3!}o}oEF*1!*3!1*7)*3s#r!1*7!)*1!s#r!*7!|g}o"7DI"@"B"D"F*B!t*B!dͯ}oEI!":*F*D5zGH"8*B*8!}oERG*:!NEOG*8":OG>H*:!ͯE>H*@!NEG![*O+)*:s#r![*O!+)*8!Rs#r![*O!+)*Bs#r*O!"O8H![*Q!R+)*:s#r![*Q!R+)*8!Rs#r![*Q+)*Bs#r*Q!R"Q!":*8#G*:!ͯEI*@!NEʾH![*O+)*:s#r![*O!+)*Ds#r![*O!+)*Bs#r*O!"OI![*Q!R+)*:s#r![*Q!R+)*Ds#r![*Q+)*Bs#r*Q!R"Q"-"/!"Q!"O![!+)*-s#r![!+)*-s#r![!+)*/s#r*Q*OͯEʭI!!Ŕ stack waabŔB4b*O!͛EJ!"S*O!R"O![*O+)^#V"Y![*O!+)^#V"W![*O!+)^#V"UqJ!"S*Q!"Q![*Q!R+)^#V"Y![*Q!R+)^#V"W![*Q+)^#V"U*U*Y!}oE*f&Q!RaEʉP*i&}o}2i*f&Q!aEʣP͇/*f&Q!SaEP*h&}o}2h*h&}oEP!ͤ&*f&Q!TaEPk"*f&Q!aEQ(*f&Q!WaE4Q*g&}o}2g*f&Q! aEWQ!"p!"n*x*n"x*z*p"z*x!ͯEʤQ*g&EʒQ!"xäQ!"x!"n!"p*x!͛EQ*g&EQ!"xQ!"x!"n!"p*z!ͯER*g&EQ!c"zR!"z!"p!"n*z!c͛ECR*g&E1R!"zCR!c"z!"p!"n*l!NEaR*z*xÒR*l!NER*z*xͯ ÒR*l!NEʒRͥ%*i&}o͠}oEʴR!"n!"p*i&ER!!5zR"vͥ%*v#R*h&EMS!!ŔY=*z!!́ X=*x!!́ gY=*z!́ gX=*x!b*f&!NELMŔB4bcŔY=*z!Q!aEʛO*z*xC*f&Q!FaEʽO*z*xF*f&Q!Ha!Ma!?aEO(*f&Q! aEO<0*f&Q!LaEP9*f&Q!aE1Pͫ3*f&Q!aEKP͓2*f&Q!aEeP͗>*f&Q!RaEʉP*i&}o}2i*f&Q!aEʣP͇/*f&Q!SaEP*h&}o}2h*h&}oEP!ͤ&*f&Q!TaEPk"*f&Q! DDraw copyright (c) 1984 by D. Griffith DDraw is a general purpose graphics/text utility designed for Kaypro'84 models. DDraw can be described as a 'McPaint' for the Kaypro. I want to say that DDraw (and this documentation) is not nearly in its final form, so please do not compare it unfavorably to some of the drawing programs available for more graphicly oriented systems. The source to DDraw will be released (probably) into the public domain as soon as I feel it is complete. Any suggestions for features, improvements, etc., can be directed to: D. Griffith 912 Terra Mar Dr. Tampa, Fla., 33612 or a message can be sent via modem on the Pro-Com 1 or 2 systems (813) 937-3608, (813) 937-6829. Drawing To draw something, simply type DDRAW at the CP/M prompt and press . The screen will clear and a graphic cursor will appear. Typing a '?' or 'H' for help will bring up a menu of commands. The numbers 1-9, not including 5, move the cursor in the direction relative to the 5 on the keypad. The 5 will toggle draw/erase mode. If you wish to position the cursor without drawing or erasing, press the B key to enter Browse mode, move the cursor as though you were drawing, then press B again to leave browse mode. To avoid having to hold down keys to move the cursor, a Repeat mode was added. By pressing the R key, all movement commands automatically repeat until either a key is pressed or the edge of the screen is reached (in non- wrap-around mode). Pressing R again puts the cursor back into a manual repeat mode. The cursor will default to stopping when the edge of the screen is reached. This can be changed by pressing the W key (to stop or start). At that time, when the edge is reached, the cursor wraps around to the opposite side. The screen can be entirely cleared by pressing ^C (hold down the CTRL key at the edge of the keyboard and press the C). If the screen was not saved, it is lost. Two features that make drawing a little easier is a line and circle drawing command. To draw a line, move the cursor to one end of the proposed line, press the L key, move the cursor to the other end and press L again. To draw a circle, move the cursor to the center of the proposed circle, press the C, move to a point on the edge and press C again. Either command may be aborted before it is drawn by pressing the space bar before pressing the command key the second time. Note that if you are in erase mode, a line or circle is erased at the indicated positions. Another useful feature is the status line. By pressing the S key, a status line indicating the cursor position will appear at the lower left of the screen. The first Y and X is a character position that can be used in programs. The second set, gY and gX are a graphics position that ranges from 0-99 for gY and 0-159 for gX. Yet another useful feature is the Text entry command. By pressing the letter T while in graphics mode, a letter-size cursor appears at the same (approximate) position of the graphics cursor. At this time, typing of text is allowed. The arrow keys (set up for WordStar or Kaypro) will move the cursor around th screen. The RETURN key will move the cursor to the beginning of the next line. To exit the text entry mode, press the ESCape key. Text (but not spaces) will overwrite graphics. This is not to say that any graphics you type over are lost; it is just that the text has priority. By typing spaces over text, any covered graphics will appear. One last command. ^U (hold down the CTRL key and press U) will refresh the screen. This is used whenever you have typed in the 80th column of the 24th line (the screen scrolls automatically) or when spaces have been typed over text to reveal covered graphics (they do not appear immediately). Subpictures It is often convenient to save a portion of a disply in a buffer and redisplay it at a different position. The subpicture commands allow this. I admit the commands are hardly mnemonic of their function, but I did not want to use multiple control codes at the time. That will probably change in later versions for ease of use. Regardless, the subpicture entry procedure is: move the cursor to the upper left corner of the block you wish to save, type ^B (hold CTRL key and press the letter B) begins subpicture entry. Follow it immediately my the number 0, 1, or 2 to tell which buffer you wish the image stored. Move the cursor to the lower right corner and press ^B again. The image will be stored. You may now continue with any editing. To recall an entered subpicture simply move the cursor to the upper left corner of where you wish it displayed and type ^R followed by the number 0, 1, or 2 depending on which picture you wish displayed. At the present time, the subpicture commands actually save a from the current character position (the YX in the status line) not the graphic cursor position (gYgX). This means that usually a little more will be stored and that the display may not start at precisely where the cursor is when the ^R command is entered. That will be remedied soon. Subpictures may be saved to disk for use in a later session by typing ^D and entering a filename. To reload a set, press the letter D and enter the filename you wish to restore. Note that executing a clear screen command (^C) does not destroy the subpictures stored in memory. A final note on redisplaying the subpictures: if the cursor is in erase mode, the subpicture will overwrite whatever is 'under' it. If the cursor is not in erase mode, the subpicture will me 'merged' with the graphics. Either way, any text will be overwritten and a screen refresh (^U) command should be issued. Printing Two methods are provided for displaying screen images on the printer. The first is solely for graphics. It prints (on a Gemini/Epson printer) a bit image of the graphic screen. To produce this print, type ^P. The other print will also copy any text to the printer. I know it works on the Gemini printers (not so sure about Epson). The command is ^O. Saving and Loading Screens To save a screen (graphics and text), type ^S followed by a filename. If the disk is read only, full, or the directory is full, an error will occur and the screen will be lost. To load a screen, type ^L followed by the filename. If the file does not exist, an error will occur. Provisions will be made in a revision to allow separate saving of text and graphics screens. This will allow text screens to be produced by other methods (word processors) then merged into the graphic screens. Miscellaneous A final command ^Q will exit DDraw without saving screens. If when asked for a filename (loading and saving), you wish to abort the command, simply press RETURN without entering anything. Note I believe I have covered all of the commands available as of December 1984.orks on the Gemini printers (not so sure about Epson). The command is ^O. Saving and Loading Screens To save a screen (graphics and text), type ^S followed by a filename. If the disk is read only, full, or the directory is full, an error will occur and the screen will be lost. To load a screen, type ^L followed by the filename. If the file does not exist, an error will occur. Provisions will be made in a revision to allow separate saving of text and graphics screens. This will allow text screens to be produced by other methods (word processors) then merged into the graphic screens. Miscellaneous A final command ^Q will exit DDraw without saving screens. If when asked for a filename (loading and saving), you wish to abort the command, simply press RETURN without entering anything. Note I believe I have covered all of the commands available DDRAW.COM The file DDRAW.COM was compiled by Turbo v2.0 with an ending address of B000h. This should allow it to run on anything with a 64k (to start) CP/M 2.2 system. It compiled and runs fine on my KP10 with a very crowded high memory area (ZCPR3, screen dumper, etc.) and a 51k TPA. As Dan states in the DOC, this program is not finished yet. He has a planned improved pattern fill routine and a few other things to do (make it work with a printer other then a Gemini/Epson I hope...) Steve Sanders (Sysop) DataCOM Network RCP/M #1 & #2 (813) 937-3608 300/1200 [ z(2!\[ S!" + Screen Print On$D Screen Print Already On$ B 6  =   >g>oPͺN˿ 0> Oͮ#>o!ͺ(NͣP:0<209%ͣ C 6 > 20 ͮ ͮ>|>}>N˿ 0> Oͮ#>o!ͺ(NͣP:0<209%ͣ C 6 > 20 ͮ ͮDB19 COMv./0123456789:;<DB19 DOC)=>?@ABDDRAW COMCDEFGHIJKLMNOPQRDDRAW COM%STUVWDDRAW DOC9XYZ[\]^_DDRAW NOT`DUMP10 $$$!9"1>2* |(j L!!!"* "!" *Installing Screen Dump$Screen Dump Already Installed$ c!xsy1!0>2wPN˿#˹y 0 l:w=2w(l{y  !0>2wPN˿#˹y 0 l:w=2w(l{y  DB19 COMv./0123456789:;<DB19 DOC)=>?@ABDDRAW COMCDEFGHIJKLMNOPQRDDRAW COM%STUVWDDRAW DOC9XYZ[\]^_DDRAW NOT`DUMP10 COMaDUMP24 $$$Using Dump10 OR Dump484 To use the screen to printer dump simply enter DUMP10 if you have a 10 (or DUMP484 if you have a new 4-84). From then until you either reset your computer (with the button in back) or turn it off, every time you hold the control key down and strike the W (enter control W) the ascii characters that you see on the screen of your Kaypro will be sent to the printer. This is true even if you are in another program such as DDT or your text editor. This version does not dump graphics characters. Some people will not want to use control W for the screen dump character. You may change the character to any thing you want but realize that the character you use will be unavailable for its old purpose. Using control W has worked for me because the only time I use to use control W was in my text editor to move the cursor to the end of the next word. When the screen dump is on this is no longer the case. Control W dumps the screen to the printer and the editor never sees it. To change the screen dump character use DDT. The process goes as follows. Everything behind the semicolons are my comments: A>DDT DUMP10.COM ;1. Enter this...DDT.COM must be on the disk ; for a 4-84 you would enter DDT DUMP484.COM DDT VERS 2.2 NEXT PC ;2. DDT prints this information about the program 0200 0100 ; and itself -S160 ;3. The minus sign is DDT's prompt I entered "S160" 0160 17 00 ;4. DDT printed the first 2 #'s I entered the number ; of the new character to use for the ScreenDump (00) 0161 C0 . ;5. DDT printed the first 2 numbers I entered the period -^C ;6. I enter a control C to exit DDT Warm Boot ;7. The computers response A>SAVE 4 NEWDS.COM ;8. Now save as a file called NEWDS.COM A> In the above I changed the dump screen character form 17 hex(control W) to 00 hex (control @). The hex numbers for the control characters are listed below. Now if I hit the reset button and enter NEWDS a control @ will dump the screen to the printer. HEX CHAR ASCII DESIGNATION HEX CHAR ASCII DESIGNATION 00 - control @ NUL 10 - control P DLE 01 - control A SOH 11 - control Q DC1 02 - control B STX 12 - control R DC2 03 - control C ETX 13 - control S DC3 04 - control D EOT 14 - control T DC4 05 - control E ENQ 15 - control U NAK 06 - control F ACK 16 - control V SYN 07 - control G BELL 17 - control W ETB 08 - control H BackSpace 18 - control X CAN 09 - control I HorizontalTab 19 - control Y EM 0A - control J LineFeed 1A - control Z SUB 0B - control K VerticalTab 1B - control [ ESCape 0C - control L FormFeed 1C - control \ FS 0D - control M CarriageReturn 1D - control ] GS 0E - control N SO 1E - control ^ RS 0F - control O SI 1F - control _ US re listed below. Now if I hit the reset button and enter NEWDS a control @ will dump the screen to the printer. HEX C*~j !91!~=W!x> ~#1b%xa {T~#o}o]CTTIME MODULE ALREADY PRESENT. $$ F  2D@2:g.".*"!"*^#VS##^#VSns#r*#s#r!9"11?>"> $G:0(<20!>6/#>!>6:#>6:#>!~$( O#*1:E G:Dx>2A2E!"B*B:A=2A~#"Bɯ2E $G0w#x0w#1 !":OA System not running on KAYPRO 4 with clock, cannot display date/time. $Enter Date/Time string trap character: $C4B7B6=8 B1B0=8U ^J / /84 : : C1C0C6B4$   @ H$oxg |1}ր!ͿQͿx@cGOc͸ͿZ7G91 <8 b=ÚGLyiÿ Z1cUyi<O cGͽO͵ycC×@O͵øcBG͵Lbi!͵O! vGy(×L¤: 1> : J ͬ C ͬͿyÝR1͏** {zX~#"  : >o&) N$ F  2D@2:g.".*"!"*^#VS##^#VSns#r*#s#r!9"11?>"> $G:0(<20!>6/#>!>6:#>6:#>!~$( O#*1:E G:Dx>2A2E!"B*B:A=2A~#"Bɯ2E $G0w#x0w#1 !":OA System not running on KAYPRO 4 with clock, cannot display date/time. $Enter Date/Time string trap character: $C4B7B6=8 B1B0=8U ^J / /84 : : C1C0C6B4$   @ H$oxg |1}ր!ͿQͿx@cGOc͸ͿZ7G91 <8 b=ÚGLyiOctober 4, 1984 Subject: TIME stamping program for KAYPRO 4'84 Recently I released a program designed for the KAYPRO 4'84 computer which displayed the date and time in the lower right corner of the screen, in the non-scrolled 25th line. This newest release (all of 4 days after the first), adds several features requested by beta test reviewers (they are NEVER satisfied). Listed below are the new features: 1. Before relocation, the program checks for the presence of the clock. If the clock is not found where it should be, the program aborts with a message. 2. When the progam is invoked, it will request from the user a 'trap character'. This character is used during normal use following the installation of the parasitic to insert the currently displayed date and time into whatever program or file is being operated upon. The date and time appears to the system to be coming from the keyboard when ever the user chosen trap character is pressed. It is recommended that the user select a rarely used control code for this function. To remind the user of his selected trap character, the display on the screen shows the character preceding the date/time string. Again, a warning. This program is a parasitic, attaching itself to the CP/M and protecting itself from destruction by other programs. It is not compatible with other parasitics such as UNIFORM, MFDISK, and EX. Be careful! Thomas Hill Alaska Micro Systems 701 W. 41st, Suite 101 Anchorage, AK. 99503 (907) 562-3900  from the user a 'trap character'. This character is used during normal use following the installation of the parasitic to insert the currently displayed date and time into whatever program or file is being operated upon. The date and time appears to the system to be coming from the keyboard when ever the user chosen trap character is pressed. It is ͫCopyright (C) 1985 BORLAND IncBKaypro with hiliteedP=  E RC1B1~7#~= oͦkԄ!!"~#(}:$= +*!5!*!!:(2!5:(>2!!!:O::O:!*! !45(! +/ 0y0( d!k5!{5__o&  :(͠|(  *"x2y( >28!"9!! og2"">~22 9/4*9 Co&ͦͣ} [ (!e{ͦA8Q0G: x@!\w# (͂ ?(*( .( w^. ^!h6# (?( *( ͂( w#>?> w#ͦ 8 !ɿ .,;:=?*[]<>{}a{ |ʹ}ͽƐ'@'7||}>2ͯ*Bڨ  "og"2>2! ""*B"[Ru*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͺw}8' RB0 >' RqRR!+ Ͱ R!+ Ͱ r!+ Ͱ r!+ Ͱ r!# Ͱ r!+ Ͱ T]KB!z> S>))0 = | |̀̀DMgo>jB0 7?= H͒<z5a)a<z {0Gɯgo||~}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } ) W _}8(8J`9{T]=o`9y ) >' ́ ͬ͗ }>' xˆ }} ˸T}ٕ(0D=z ,= ( ͒ 0%{ , 7 ?(8ͬ x ͆ - r 8˸x ͏  ,-xG}r }مM 9r .>#n0͒ { = - nx ͇ ,-(-˸G,-r }ٕ?M 9.> 8ͬ ?= u+-(>͆ 0ͬ ͆ 8 ?x ͇ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցr <(r 7{ = |٤g{٣_z٢Wy١Ox٠G{ ͬ ́ }x>' ͬ}ƀ/ƀo -́ }0͎-́ ͎,}l˸ 8 4 ͗ x( - 8́ - 8,́ }l8;*!͗ ! >4ͬ͗ ͗ ͬ--- ́ ,,,-xGg?+2n*8t z~,->' x' ͘}. ͆́ , ! >4,͢- o&0%,͗ }gr }؉}颋.:}8c~I$I~L*͢ٷx˸ }0G,<},-(-́ !>I0 ͗͘ o8 ͆ >' m.`1pF,t6|!wS<.z}[|%FXc~ur1}͆ٯx(<˸ 8 !~J 0.O!>s 8 =  n s͗ ͆ .n 0 ͎-́ OT0 j oD,:j !I}袋.}8c~I$I~L! >ͬ͗ I× nn ͗ = ͆ nf^VNF!DLT\I!!53!r1!͒!> x #-= o˸x͆(- }(x>8(z ,z `iÃ!>' |r |̀>)=|(DMbo˸88x(0 8> ̀x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#}˸}րogM| .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i&?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͺ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('k!0(ˮ]k!8ˮ!]~-#8~>27kˮw>O$6̃s #r$ͣ6̏ k ( (ˮ qk(ˮ ( k ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò*:4^q*##~6ͺ>2}*|(̓|( ̓6-#[RM8( G> A~#*'C! !TRUEFALSE!9N#Y~#( G~#> >    "~(kѻ(( !0 (ˮ!!>2Sz:0:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͮ*-w#ww##> ͮÁ""~>2:ZR0 *4#4>2:ZR> *4 #4(> >22*f(/˦:G(##~++ :O x yC!ͺ Q*:G(##~._.͚f<\=<͚*##w ͮ +4 #4x >>2:G("ͮ"*nˮ*0 SZѷR8@* N#F#s#r, 0})jS\*##w+ N#FB ͮr+s>2!T]>)j)0 0= ]R!#]*^#V#N#F#^#V>2Ͱ:0:*6 #-Nw#Fwq#p#6#w#w#w"~Á>">!DM!":*B:!>(>2>">!"2"~ʰ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pSZѷR&* s#r$ s#rL <?*L!\  <( !\$>2>2L:>!(* \$\<(!3: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>) 2""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* uKB!0>' ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#K*K*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!F"" &y*"*>2"*"!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!L&sB>Ù%0123456789ABCDEF}2""*&!!*s#r*&!E!!*s#r! }2!!*&!!!̈́!ͺ*&"ͺ !:!ͪ*&"!:!ͪͺ *&!&ͺ ! *&!n&"! *&!En&" **̈́!ͺ*&" !ͩ!D *&́!͑!͑!͑OE,"k**!ͺ*&" *&R»"*&! Eʱ"*&!R}2ø"!}2#R"*&!E"*&!}2"! }2#R#!ͺ!:!ͪ *&!Ed!8#LEADING DIGIT!!!ͺͺ S E C O N D D I G I T !! fzʴ#}2!*&!!ͺ!+#*&+n&" *&#r#!!!ͺ!:!ͪ! " !!fz$}2!ͺͺ ! *&n&" *&##!ͺͺ  !!!ͺ! " !!fzʏ$}2!*&!!ͺ! *&n&" *&#N$!!!ͺ! "!:!ͪ !!!fz%}2k!}!{*&!*}*{!ͺ*&" *&#$!!̈́!ͺͺNORMALͺ ͺREVERSEͺ ͺDECͺ ͺHEX !!!ͺͺ. <-- = ^S ^D = --> ^Q to exit !!Be.͢ =!0e.=!!!Ce.͢ =!0e.=!!!Ce.͢ =!4e.=!!!Be.͢ =!4e.=!!ͺ!:!ͪ >(#͵$%]! !0e.=!!!Ce.͢ =!4e.=!R»"*&! Eʱ"*&!R}2ø"!}2#R"*&!E"*&!}2"! }2#R#!ͺ!:!ͪ *&!Ed!8#LEADING DIGIT!!!ͺͺ S E C O N D D I G I T !! fzʴ#}2!*&!!ͺ!+#*&+n&" *&#r#!!!ͺ!:!ͪ! " !!fz$}2!ͺͺ ! *&n&" *&##!ͺͺ  !!!ͺ! " !!fzʏ$}2!*&!!ͺ! *&n&" *&#N$!!!ͺ! "!:!ͪ !!!fz%}2k!}!{*&!*}*{!ͺ*&" *&#KP-CHARS.COM 17 April 1985 Target Machines: KayPro 4-84, KayPro 10, KayPro 2-84 and other KayPro machines that have "graphics" capabilities. This program is a short tour through the characters that your KayPro can display on the screen. The display consists of a table of all displayable characters (those with an ASCII code greater than 31 decimal) and a status line showing 1) the character at the current cursor position in the table in both normal and reverse video and 2) the Decimal and Hexadecimal ASCII codes for the character. After starting the program you can move around in the chart by using the CTL-S key to move left (the left arrow key does the same thing if you have not redefined it) and the CTL-D key to move right (the right arrow key). Your comments or suggestions are appreciated: Rick Warner 430 O'Keefe Apt. 210 Palo Alto, CA 94303-2140 TIME V2.0 RAS 6/30/84!9"*1R>">">"> $!,xI $w#9> $4!1>/++n-&~#s!.~AڒPʒ'™>wx2):)>M:!,6#] >2RR !S~(_#6 #6!T"'."/ *'"y21#. y20#"'*'UD; *#/y2/~ #.:y2.#.y2-~:€#.y2,~ #~AʥP:.ʲ'2.ò:.²>2.#~M#~ #~:,> >$!,x ~$# >2"!T6 #6^#6$T  ""'~0O:OWyO#5xX~*'7Enter values in above format. Omitted values are unchanged. $Set OK. $ ++ Invalid format ++ $Nothing set. $**_> > > ~~0~0>:+SUNMONTUEWEDTHUFRISAT KP4TIME.COM Version 2.0 ; CP/M program to display and set the real-time clock on Kaypro 4-84. ; Written 04/22/84 by Bob Snider, Columbus Ohio. Greatly expanded 6/30/84. ; Dispaly is MM/DD HH:MM:SS and can be 24-hour format or 12-hour with ; AM/PM. Date is optional, and the ability to set the clock is optional ; for those who want a minimum length module. Customize this assembly ; by setting the options in the "Customization section". ; The clock is just displayed by the command "TIME". The clock is displayed ; and set by anything extra on the command line, ie. "TIME SET". The ; program will prompt for date and time value which must be entered as in the ; display format. Each of the following items can be set independently: ; Date (month/day) ; Day of the week ; Time of day (seconds may be omitted) ; If the 12-hour format is on, AM or PM must always follow the time. ; Any omitted items are not changed in the clock. ; The clock is set at the carriage return. The input line is parsed for ; proper format, but not checked for valid dates or times. If nothing is ; entered the time is unchanged. If an error is detected, the position of ; the error in the string is flagged with a '^' and nothing is set. ; The clock is checked to see if an update has occurred while being read, ; and it is re-read if so, ensuring valid time displays. ; Problems or enhancements should be directed to the Kaypro User's Group on ; CompuServe, page PCS-25. command "TIME". The clock is displayed ; and set by anything extra on the command line, ie. "TIME SET". The ; program will prompt for date and time value which must be entered as in the ; display format. Each of the following items can be set independently: ; Date (month/day) ; Day of the week ; Time of day (seconds may be omitted) ; If the 12-hour format is on, AM or PM must always follow the time. ; Any omitted items are not changed in the clock. ; The clock is set at the car; TIME.COM (8080 version) Version 2.0. ; CP/M program to display and set the real-time clock on Kaypro 4-84. ; Written 04/22/84 by Bob Snider, Columbus Ohio. Greatly expanded 6/30/84. ; Dispaly is MM/DD HH:MM:SS and can be 24-hour format or 12-hour with ; AM/PM. Date is optional, and the ability to set the clock is optional ; for those who want a minimum length module. Customize this assembly ; by setting the options in the "Customization section". ; The clock is just displayed by the command "TIME". The clock is displayed ; and set by anything extra on the command line, ie. "TIME SET". The ; program will prompt for date and time value which must be entered as in the ; display format. Each of the following items can be set independently: ; Date (month/day) ; Day of the week ; Time of day (seconds may be omitted) ; If the 12-hour format is on, AM or PM must always follow the time. ; Any omitted items are not changed in the clock. ; The clock is set at the carriage return. The input line is parsed for ; proper format, but not checked for valid dates or times. If nothing is ; entered the time is unchanged. If an error is detected, the position of ; the error in the string is flagged with a '^' and nothing is set. ; The clock is checked to see if an update has occurred while being read, ; and it is re-read if so, ensuring valid time displays. ; Problems or enhancements should be directed to the Kaypro User's Group on ; CompuServe, page PCS-25. ; ; CONDITIONAL ASSEMBLY CONSTANTS FOR CUSTOMIZATION. NO EQU 0 ;VALUE FOR 'NO' IN OPTIONS. YES EQU 1 ;VALUE FOR 'YES' IN OPTIONS. ; ; CUSTOMIZATION SECTION. EACH OPTION MUST BE CODED 'YES' OR 'NO'. ; AMPM EQU YES ;12-HOUR CLOCK FORMAT WITH AM/PM. NO=24 HOUR. DATE EQU YES ;DATE IS DISPLAYED. WEEKDAY EQU YES ;DAY OF WEEK IS DISPLAYED. ZEROSUP EQU YES ;SUPPRESS LEADING 0'S IN NUMBERS. SETTIME EQU YES ;ALLOW TIME TO BE SET. NO=DISPLAY ONLY. ; ; COMPILE-TIME CONSTANTS. ; BOOT EQU 0000H ;SYSTEM BOOT ADDRESS BDOS EQU 0005H ;BDOS ENTRY POINT COMTAIL EQU 0080H ;COMMAND TAIL FROM COMMAND LINE (COUNT+CHARS) CONOUT EQU 2 ;CODE FOR CONSOLE OUTPUT REQUEST RTCA EQU 20H ;CLOCK ADDRESS SELECT REG RTCD EQU 24H ;CLOCK DATA REGISTER RTCS EQU 22H ;CLOCK STATUS REGISTER REGEND EQU 5+(DATE*3 OR WEEKDAY) ;ENDING REGISTER COUNT FOR TIME LOOP CR EQU 0DH ;CARRIAGE RETURN CHAR LF EQU 0AH ;LINE FEED CHAR ; ; WE BEGIN. ; ORG 0100H JMP START ;SKIP ID DB 'TIME V2.0 RAS 6/30/84' START: ; FIRST SAVE CP/M STACK AND SET UP OURS. LXI H,0 ;CLEAR HL DAD SP ;ADD SP+0 IN HL SHLD SAVESP ;SAVE SP OF CPM LXI SP,STACK  ;POINT TO MY STACK AREA ; ; READ THE CLOCK TIME IN ONE BURST. ; READTIME: MVI A,0CFH ;INITIAL STATUS SETUP BYTE OUT RTCS ;SET PIO FOR MODE 3 IN/OUTPUT MVI A,0E0H ;LOW 5 BITS OUTPUT, TOP 3 INPUT OUT RTCS ;SET PIO IN/OUT BITS MVI A,03H ;DISABLE INTERRUPTS OUT RTCS ;DO IT MVI A,14H ;STATUS REG ADDR OUT RTCA ;SELECT IT IN RTCD ;RESET STATUS BIT DOREAD: LXI H,VALUE ;POINT TO TIME SAVE AREA MVI B,2 ;START WITH SECONDS BURST: MOV A,B ;A IS REGISTER WE WANT TO READ CPI REGEND ;GOTTEN ALL WE WANT? JNC CHECK ;YES, DONE GETTING TIME OUT RTCA ;SELECT THAT REGISTER OF CLOCK IN RTCD ;READ THE CLOCK DATA MOV M,A ;SAVE IN CORE INX H ;NEXT MEMORY LOCATION INR B ;NEXT REG ADDR JMP BURST ;GO GET MORE DATA CHECK: ; SEE IF THE CLOCK ROLLED OVER DURING THE READS. MVI A,14H ;STATUS REG ADDR OUT RTCA ;SELECT IT IN RTCD ;GET STATUS ORA A ;WAS CLOCK ROLL? JNZ DOREAD ;YES, GO READ AGAIN ; ; FORMAT THE DATE AND TIME AND SEND TO CONSOLE. ; GOTIT: IF DATE ;INCLUDE ONLY IF DATE DISPLAY OPTION LXI H,MONTH ;POINT TO MONTH VALUE CALL HEXOUTL ;PRINT IT (MAYBE ZERO SUPPRESSED) MVI A,'/' ;SEPARATOR CALL CHAROUT ;SEND A CHAR DCX H ;POINT TO DAY OF MONTH CALL HEXOUTL ;PRINT IT (ALSO ZERO-SUP) CALL BLANK ;PRINT A BLANK ENDIF ;(DATE) IF WEEKDAY ;INCLUDE IF DAY OF WEEK OPTION DCX H ;POINT TO DAY OF WEEK MOV L,M ;GET VALUE DCR L ;ADJUST FOR 0-6 MVI H,0 ;CLEAR TOP LXI D,DAYTAB ;GET ADDRESS OF TABLE XCHG ;FLIP HL,DE DAD D ;TABLE+3*(HL)=NAME TO USE DAD D DAD D MVI B,3 ;3 CHARS TO SHOW WKOUT: MOV A,M ;GET ONE CALL CHAROUT ;SEND IT INX H ;NEXT DCR B ;COUNT IT JNZ WKOUT ;LOOP CALL BLANK ;PUT SPACER ENDIF ;(WEEKDAY) LXI H,HOURS ;POINT TO HOURS IF AMPM ;INCLUDE ONLY IF 12 HOUR AM/PM DISPLAY OPT. MOV A,M ;GET HOURS MVI B,'A' ;ASSUME AM CPI 12H ;IS AFTERNOON? JC NOPMADJ  ;NO, NO MORE ADJUSTMENTS MVI B,'P' ;YES, IS PM JZ NOPMADJ ;IF STILL IN HOUR 12, NO NUMBERIC ADJUST SBI 12H ;SUBTRACT 12 HOURS DAA ;DECIMAL ADJUST NOPMADJ: CPI 00H ;IS MIDNIGHT HOUR? JNZ NOMIDAM ;NO MVI A,12H ;YES, SET 12 AM NOMIDAM: MOV M,A ;RESET HOURS MOV A,B ;GET AM/PM FLAG STA AMPMFLAG ;SAVE IT FOR LATER ENDIF ;(AMPM) CALL HEXOUTL ;PRINT HOURS (MAYBE ZERO SUPPRESSED) CALL COLON ;PUT OUT A ":" FOLLOWED BY MINUTES CALL COLON ;':' AND SECONDS IF AMPM ;IF AM/PM DISPLAY OPTION CALL BLANK ;PRINT A BLANK LDA AMPMFLAG ;GET A OR P CALL CHAROUT ;PRINT IT MVI A,'M' ;GET AN M CALL CHAROUT ;PRINT IT ENDIF ;(AMPM) CALL CRLF ;PUT OUT CR LF ; ; SEE IF CLOCK SET REQUESTED BY ANYTHING IN THE COMMAND TAIL. ; PROMPT FOR THE DATE AND TIME TO SET THE CLOCK IF REQUESTED. ; IF SETTIME ;INCLUDE ONLY IF TIME SET OPTION LDA COMTAIL ;GET THE COUNT CPI 2 ;IS AT LEAST 2 CHARS? JC DONE ;NO, RETURN NOW ; SET THE TIME REQUESTED. DOSET: LXI H,VALUE ;POINT TO DATE/TIME VALUE AREA MVI B,6 ;COUNT TO CLEAR CLEAR: MVI M,0FFH ;SET NO VALUE INX H ;NEXT DCR B ;COUNT JNZ CLEAR ;LOOP FOR ALL LXI D,PROMPT ;POINT TO PROMPT MESSAGE MVI C,09H ;PRINT STRING FUNCTION CALL BDOS ;PUT TEXT ON SCREEN. MVI A,30 ;GET BUFFER LENGTH STA INMAX ;SET LENGTH  LXI D,INMAX ;POINT TO START OF BUFFER PARMS MVI C,0AH ;READ BUFFER FUNCTION CALL BDOS ;READ CONSOLE INPUT CALL CRLF ;FEED A LINE LXI H,INLEN ;POINT TO INPUT BUFFER LENGTH MOV A,M ;GET RETURNED LENGTH ORA A ;WAS IT ZERO? JZ NOTSET ;YES, NOTHING TO SET MOV E,A ;SAVE COUNT MVI D,0 ;CLEAR D INX H ;POINT TO 1ST CHAR DAD D ;POINT BEYOND LAST CHAR MVI M,' ' ;SET A SCAN DELIMITER INX H ;POINT ONE MORE MVI M,0 ;SET FINAL PARSE DELIMITER LXI H,INBUF ;POINT TO FIRST CHAR ENDIF ;(SETTIME ALONE) IF SETTIME AND DATE ;INCLUDE IF DATE OPTION IS ON SHLD WKPTR ;SAVE SCAN POINTER CALL NUMBER  ;DECODE A NUMBER AND DELIMITER JC NODATE ;INVALID NUM, NO DATE THERE CPI '/' ;WAS DELIM A SLASH? JZ OKDATE ;YES, WE HAVE A DATE LHLD WKPTR ;NO, RESTORE SCAN TO START JMP NODATE ;CONTINUE NEXT ITEM OKDATE: MOV A,C ;GET DECODED VALUE STA MONTH ;SET MONTH INX H ;NEXT CHAR CALL NUMBER ;TRY FOR DAY JC ERROR CPI ' ' ;WAS DELIM A BLANK? JNZ ERROR ;NO, BAD MOV A,C ;GET NUM STA DAY ;SET DAY OF MONTH INX H ;NEXT CHAR ENDIF ;(SETTIME AND DATE) NODATE: IF SETTIME AND WEEKDAY ;INCLUDE WITH DAY OF WEEK OPTION LXI D,DAYTAB ;POINT TO TABLE MVI C,1 ;INIT VALUE SHLD WKPTR ;SAVE START POINTER LOOKUP: LHLD  WKPTR ;GET START ADDR MVI B,3 ;LENGTH LOOKUPLOOP: LDAX D ;GET TABLE CHAR CPI 0 ;END OF TABLE? JZ NOWEEKDAY ;YES, NOT FOUND, NOT ERROR YET XRA M ;BASIC COMPARE ANI 0DFH ;ELIMINATE CASE DIFFERENCE JZ LOOKMATCH ;MATCHES IF ZERO ADJUST: INX D ;NO MATCH, BUMP TABLE PTR DCR B ;FOR REST OF LENGTH JNZ ADJUST ;LOOP INR C ;BUMP VALUE JMP LOOKUP ;TRY NEXT LOOKMATCH: INX D ;NEXT IN TABLE INX H ;NEXT IN INPUT DCR B ;COUNT JNZ LOOKUPLOOP ;TRY NEXT CHAR ; GOOD WEEK DAY NAME FOUND. MOV A,C ;GET DECODED VALUE STA DAYOFWEEK ;SAVE MOV A,M ;GET NEXT CHAR CPI  ' ' ;IS GOOD DELIM? JNZ ERROR ;NO, CRUSH IT INX H ;POINT TO NEXT CHAR ENDIF ;(WEEKDAY) NOWEEKDAY: IF SETTIME ;INCLUDE IF SET TIME OPTION CALL NUMBER ;GET NEXT NUMBER JC NOTIME ;NO TIME THERE CPI ':' ;WAS DELIM ':'? JNZ ERROR ;NO, BAD INPUT MOV A,C ;GET VALUE STA HOURS ;SAVE INX H ;NEXT CALL NUMBER ;TRY FOR MINUTES JC ERROR MOV A,C STA MINUTES ;SAVE MINUTES MOV A,M ;GET DELIM AGAIN CPI ':' ;CHECK DELIM JNZ NOSECS ;ALLOW SECONDS TO BE OMITTED INX H ;NEXT CALL NUMBER ;TRY FOR SECONDS JC ERROR ;BAD MOV A,C STA SECONDS  ;SAVE SECONDS NOSECS: MOV A,M ;GET DELIM AGAIN CPI ' ' ;VALID FINAL DELIM? JNZ ERROR ;NO, GARBAGE INX H ;NEXT CHAR ENDIF ;(SETTIME) IF SETTIME AND AMPM ;INCLUDE DECODING FOR 12-HOUR FORMAT OPTION MOV A,M ;GET NEXT CHAR ANI 0DFH ;MAKE UPPER CASE CPI 'A' ;IS A? JZ AOK ;YES CPI 'P' ;IS P? JNZ ERROR ;NO, ERROR LDA HOURS ;FOR PM, GET HOURS BACK CPI 12H ;WAS IT NOON HOUR? JZ APOK ;YES, NO ADJUST ADI 12H ;+12 HOURS FOR PM DAA ;DECIMAL ADJUST STA HOURS ;UPDATE VALUE JMP APOK ;CONTINUE AOK: LDA HOURS ;GET HOURS CPI 12H ;WAS MIDNIGHT HOUR? JNZ APOK ;NO, NO ADJUST MVI A,00H ;YES, SET TO 00 HOURS STA HOURS ;UPDATE HOURS APOK: INX H ;POINT TO 'M' MOV A,M ;GET IT ANI 0DFH ;UPPER CASE CPI 'M' ;IS IT REALLY? JNZ ERROR ;AW, SHUCKS INX H ;LAST CHECK MOV A,M ;GET DELIM CPI ' ' ;VALID? JNZ ERROR ;NO INX H ;NEXT ENDIF ;(SETTIME AND AMPM) NOTIME: IF SETTIME ;NOW FOR ALL SETS MOV A,M ;LOOK AT LAST DELIM ORA A ;WAS END OF STRING? JNZ ERROR ;FOOEY ; NOW LOAD THE TIME VALUES INTO THE CLOCK DEVICE. LDA SECONDS ;FIRST CHECK FOR SECONDS GIVEN CPI 0FFH ;WAS OMITTED? JZ NOGO ;YES, NO GO COMMAND  MVI A,15H ;GET ADDRESS FOR 'GO' COMMAND OUT RTCA ;RESET SECONDS AND BELOW MVI A,00H ;JUST CLEAR REG OUT RTCD ;CAUSE LOW REGS TO CLEAR NOGO: MVI B,2 ;START AT SECONDS REGISTER LXI H,SECONDS ;POINT TO SAVED SECONDS VALUE OUTSET: MOV A,B ;GET REG ADDR CPI REGEND ;DONE ALL WE WANT? JNC SETOK ;YES, SET IS DONE OUT RTCA ;SELECT THAT REG MOV A,M ;GET SAVED VALUE CPI 0FFH ;IS IT 'NO CHANGE'? JZ SKIPIT ;YES, SKIP THIS ONE OUT RTCD ;SET THE REGISTER SKIPIT: INX H ;POINT TO NEXT VALUE INR B ;NEXT REG ADDR JMP OUTSET ;LOOP FOR ALL REGS SETOK: LXI D,OKMSG ;POINT TO TIME SET OK ECHOEXIT: MVI C,09H  ;PRINT STRING FUNCTION CALL BDOS ;PUT TEXT ON SCREEN. MVI A,0 ;GET A ZERO STA COMTAIL ;CLEAR COMMAND TAIL LENGTH JMP READTIME ;DISPLAY NEW TIME AND EXIT ERROR: PUSH H ;SAVE ADDR OF ERROR MVI B,30 ;SET UP TO CLEAR 30 CHARS LXI H,INBUF ;POINT TO BUFFER FLAGLOOP: MVI M,' ' ;CLEAR A CHAR INX H ;NEXT DCR B ;COUNT JNZ FLAGLOOP ;LOOP POP H ;GET ERROR ADDR BACK MVI M,'^' ;PUT A POINTER TO ERROR INX H ;NEXT MVI M,'$' ;PUT ENDING STRING LXI D,INBUF ;POINT TO ERROR FLAG LINE MVI C,09H ;PRINT STRING FUNCTION CALL BDOS ;DISPLAY FLAG LINE LXI D,ERRMSG ;POINT TO ERROR MESSAGE  MVI C,09H ;PRINT STRING CALL BDOS ;DISPLAY ERROR MSG JMP READTIME ;RE-TRY INPUT ; NOTHING ENTERED IN RESPONSE TO PROMPT. SAY NOT SETTING AND DONE. NOTSET: LXI D,NOSETMSG ;POINT TO MSG JMP ECHOEXIT ;EXIT WITH TIME DISPLAY ; ; ROUTINE TO DECODE A NUMBER UP TO 2 DIGITS AND A DELIMITER. ; INPUT IS HL POINTING TO NEXT IN BUFFER. 0 BYTE IS END OF STRING. ; NUMBER VALUE (IN BCD) IS RETURNED IN C. DELIMITER IS IN A. ; ANY ERROR DETECTED IN NUMBER CAUSES CARRY FLAG SET AND HL RESTORED. ; NUMBER: MVI B,2 ;INIT MAX DIGIT COUNTER MVI C,0 ;CLEAR ANSWER WORK AREA SHLD WKPTR ;SAVE STARTING SCAN GETDIG: MOV A,M ;GET CHAR FROM BUFFER CPI '0' ;IS >= '0'? JC NONDIGIT ;NO, NOT A DIGIT CPI '9'+1 ;IS <= '9'? JNC NONDIGIT ;NO, NOT A DIGIT  ANI 0FH ;ISOLATE DIGIT VALUE MOV D,A ;SAVE IT MOV A,C ;GET PREVIOUS VALUE RLC ! RLC ! RLC ! RLC ;SHIFT TO HIGH NYBBLE ORA D ;ADD IN NEW DIGIT MOV C,A ;SAVE NEW VALUE INX H ;POINT TO NEXT CHAR DCR B ;COUNT DIGIT JNZ GETDIG ;TRY FOR ANOTHER IF LENGTH LEFT NONDIGIT: MOV A,B ;LOOK AT COUNT CPI 2 ;WERE THERE ANY DIGITS? JZ BADNUM ;NO, ERROR MOV A,M ;GET DELIMITER BACK ORA A ;TURN OFF CARRY RET ;RETURN GOOD BADNUM: LHLD WKPTR ;RESTORE SCAN PTR STC ;SET WE HAD AN ERROR RET ;RETURN ERROR ; TIME SET MESSAGES. PROMPT: DB 'Enter values in above format. Omitted values are unchanged.' DB CR,LF,'$' OKMSG DB 'Set OK.',CR,LF,'$' ERRMSG DB CR,LF,'Invalid format.',CR,LF,'$' NOSETMSG: DB 'Nothing set.',CR,LF,'$' ; ENDIF ;(SETTIME) ; ; DONE. RESTORE PREVIOUS STACK AND RETURN TO CP/M. ; DONE: LHLD SAVESP ;GET SAVED SP SPHL ;SP=HL, RESTORE PREV SP RET ;RETURN TO CP/M ; ; SUBROUTINE TO PUT A CHARACTER TO CONSOLE. CHAR IN A. SAVES HL. ; CHAROUT: PUSH H ;SAVE NEEDED REG PUSH B MVI C,CONOUT ;SET BDOS REQUEST CODE MOV E,A ;PUT CHAR IN E CALL BDOS ;SYSTEM CALL POP B POP H ;RESTORE RET ;DONE ; ROUTINE ENTRY TO PUT A BLANK ON THE SCREEN. BLANK: MVI A,' ' ;GET A SPACE JMP CHAROUT ;CONTINUE IN CHAROUT SUBROUTINE ; ROUTINE ENTRY TO PUT CR AND LF ON THE SCREEN. CRLF: MVI A,0DH ;CARRIAGE RETURN CALL CHAROUT MVI A,0AH ;LINE FEED JMP CHAROUT ; ; SUBROUTINE TO OUTPUT BYTE AS TWO HEX ASCII DIGITS ON CONSOLE. ; INPUT AT (HL). ; HEXOUTL: ;LEADING DIGIT OUTPUT ROUTINE IF ZEROSUP ;IF LEADING ZERO SUPPRESSION OPTION MOV A,M ;GET BYTE ANI 0F0H ;ISOLATE HIGH NYBBLE JZ HEXLOW ;IF ZERO, DONT PRINT IT ENDIF ;(ZEROSUP) HEXOUT: MOV A,M ;GET BYTE RRC ;MOVE TO LOW NYBBLE RRC RRC RRC ANI 0FH ;ISOLATE LOW NYBBLE ORI 30H ;MAKE ASCII DIGIT CALL CHAROUT ;PRINT IT HEXLOW: MOV A,M ;GET BYTE AGAIN ANI 0FH ;ISOLATE LOW NYBBLE ORI 30H ;ASCII AGAIN CALL CHAROUT ;PRINT 2ND RET ;DONE ; ROUTINE ENTRY TO PUT OUT A COLON FOLLOWED BY NEXT VALUE FROM TIME. COLON: MVI A,':' ;GET A COLON CALL CHAROUT ;PUT IT OUT IN CHAROUT DCX H ;POINT TO NEXT VALUE TO GO JMP HEXOUT ;PRINT IT AND RETURN ; ; CONSTANTS. ; IF WEEKDAY ;FOR DAY OF WEEK OPTION DAYTAB: DB 'SUNMONTUEWEDTHUFRISAT',0 ;DAY OF WEEK TABLE ENDIF ; ; WORK AREA. ; WKPTR DS 2 ;INPUT SCAN POINTER SAVE AREA AMPMFLAG DS 1 ;'A' OR 'M' FOR AM/PM OPTION SAVESP DS 2 ;SAVE AREA FOR CP/M STACK POINTER VALUE EQU $ ;SAVED TIME VALUE WORK AREA SECONDS DS 1 ;SECONDS MINUTES DS 1 ;MINUTES HOURS DS 1 ;HOURS DAYOFWEEK DS 1 ;DAY OF WEEK DAY DS 1 ;DAY MONTH DS 1  ;MONTH IS LAST THING DS 32 ;16-POSITION STACK STACK: EQU $ ;STACK POINTER STARTS HERE INMAX DS 1 ;MAXIMUM INPUT SIZE PUT HERE INLEN DS 1 ;RETURNED INPUT CHAR COUNT INBUF DS 32 ;INPUT BUFFER + ENDING DELIMS ; END  IF WEEKDAY ;FOR DAY OF WEEK OPTION DAYTAB: DB 'SUNMONTUEWEDTHUFRISAT',0 ;DAY OF WEEK TABLE ENDIF ; ; WORK AREA. ; WKPTR DS 2 ;INPUT SCAN POINTER SAVE AREA AMPMFLAG DS 1 ;'A' OR 'M' FOR AM/PM OPTION SAVESP DS 2 ;SAVE AREA FOR CP/M STACK POINTER VALUE EQU $ ;SAVED TIME VALUE WORK AREA SECONDS DS 1 ;SECONDS MINUTES DS 1 ;MINUTES HOURS DS 1 ;HOURS DAYOFWEEK DS 1 ;DAY OF WEEK DAY DS 1 ;DAY MONTH DS 1 ͫCopyright (C) 1984 BORLAND IncA----KAYPRO 10----tedP= ERTC0BB0~7#~=% o&ͦoͦܐԩͣ}!!"8~#(}:$= +*!Z!*B!!:(=2!Z: <2!!!:O::O:!*B! !45(!.+/ 0y0( d!kZ!{Z͈͈o&  :(y ͠|( *"x2y( >28!?"9!!>2 :D]SXN]D [ (!e}̈́A8Q0G: x@!\w# (   yV. V!h6# (*(.(!8}(*(̈́w#>?> w#a{ |͒}͛Ɛ'@'7||}>"C"6# ""͐ͩ*B"[R5*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#E͊w}8uRB0 >R@RR!+ͨ z R!+ͨ z <!+ͨ z <!+ͨ z <!#ͨ z <!+ͨ z T]KB!z> S>))0 = |JJDMgo>jB0 7?= H\<z5+)+<z {0Gɯgo||H}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'ͬͬdͬ ͬ} wͦWͧ _}8(8J`9{T]=o`9y w >uJ u` }>(; xQ }} ˸T}ٕ(0D=C ,= ( [ 0%D , 7 ͏ ?(8u x O - ; 8˸x X ,-xG}; }م 9; .>#n0[ D = - nx P ,-(-˸G,-; }ٕ? 9.>͏ 8u ?= u+-(>O 0u O 8͏ ?x P , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx(ͼ ?}ٽÏ }ց; <(; 7D = |٤g{٣_z٢Wy١Ox٠GD u J }x>uu}ƀ/ƀo; -J }0W-J W,}l˸ͨ 8 ; ` x( -ͨ 8J -ͨ 8,J }l8;*!` ! >u` ` u--- J ,,,-xGg?+2n*8t z~,->uxu a}.; OJ , ; !U >,k- o&0%,` }g; }؉}颋.:}8c~I$I~L*kٷx˸; }0G,͙<},-(-J ! >0 a` o8 Oþ >um.`1pF,t6|!wS<.z}[|%FXc~ur1}Oٯx(<˸ͨ 8; !~Jͨ 0O!><ͨ 8 =  7 <` O ; 7 0 W-J OT0 j oD,:j !I}袋.}8c~I$I~L!>u` ` 77 ` = O nf^VNF!DLT\I!!53!r1!\!> x #-= o˸xO(- }(x>8(C ,C `iM!>u|; |J>| )=|(DMbo˸ͦ88ͦx(0 8> Mx(>-Ͳ{(ay(Ͱͦ \z(>.Ͳ (Ͱ ~ͦ{>EͲ>+|(|Dg>-Ͳ|/ 0:p# ~# +>0w#,-  60#J˸}րogM| .(C = ~> x0w#xG%P %P ZJDM%P = _~65i+~hìx-Sx9?+{Η@}|C C gZJDM0D ,7}o˸  #yO!@9i&   # w# /w# w#!9! E9!!9~(+F͊!"9!(#>2*Ͳ"|>" :( ͆ *6#w*6#6 !\$![ (̈́( #:~CONTRMKBDLSTAUXUSR>2$*#~ Ͷ$*:> >w###6  #6++p>2S-$Ͷ:*6###ww#w$w#w: ##N#F*B> w#w#[s#r>2S$Ͷ$*6 #-Nw#Fwq#p#6#w#w#w* :( ͒: *^ F* < >26"~͟*-w#ww#͟"~ <@*Ͳ!\  <ʮ!\$> >2*|>! * \$\<(!: [1Á\!(f"> 2:!<"F( #~#6e>!["N>!~8>O6*"w (=(&("( :(N 8y(~#x+% (6*#~[*#~ *~(h#"b=  8 J= B== ͯ}8= ͵}/ͭ !*###~-_~(4Q6*>2>*##w:>*##~*#~(E[ ( ( ( !][ ( ( ((w#(6!]~-#8~>7  [>OkͼMs #rkͼpX á[ [ (( #w(q*#~[ (  *##~6͜O$*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46͡> *:4^q}Ò*|(M|( M6-#͐ͦ[R8 (G> ͒C~͒#*ͦC!h !lTRUEFALSEͦ!9^#(~#(G~͒#> ͒> Ò "F![(#RR0*4#4> RR *4 #4(>>2$*V(/˖:(#~+ x y2!͵( =( X:(R*:(###~-_-͌X> :("͟"*^˞*V˖0 SRѷR8A* N#F#s#r$ 0})jS\*###w* N#FB ͟r+s> !T]>)j)0 0= UR!#U*^#V#N#F#^#V>">!2DM"~x(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>> SRѷR* s#r$ s#r"S"! N#FB(^x * 6#[<(H*! Kq#p##K[! *! 4 #4! x *$ *>w""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* 5KB!>u~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6# * *!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#VS>O"w2x2!"" @*>2"!"""!\Ͳ*: !~6go(\R*s#r_2x( s x(T]DMR0 -a%}̈́o*!~6o&͠|ͣ}%^C User break1:% I/O% Run-time% error ͒%, PC=[R"͍% Program aborted*1!͍!5 ͲÇ3c!!P5zʋ "*!R!b*!R!b*!R!b*!R!b*!R!b*!R!b*#!!Ez "!*e! ! x!͹o˷R"*= eG(R$!#!*)*#|bxO } -=*/"bB9/"^!*܁*G8u*Ou6*u# *$B(Ro Daw G!/"bB9/ *u!*G@*G8!u! 9 !*Ou!6*u!*! # ""(R͎! H*` O#VoG-͹ͽ!  x**0=*+e!aN(Rz!# ~  Oe!!xG"*Dxx#!!!q(Zu  (R  xG-͹o# e aN(R [.*)** # D>*"1 wG(R * #G <"*Dxx=qu G-NGX NX!a# !"(R͒S"uxG"*Dxx ('(!q(*=O:$B(Rw! "O.r(  2 O=*"N$*M*0=O !aN(R4z!## F*">x|aS |a*# éaN(Rb! ~  O *" O(V 9/"bB9/( *u!*(G@*G8!u8u! ́*Ou!^u!*SC# ("(Rͣ(# x͹(GEL*=aN(R> #!*)*# *" *}# *u! )(/"bB#p&N ̈́uDu*Ouu# ] (Rͅ! Daw G! /"bB9/-w *u! wG@*G8!Du!*"^*Ou!u! ~!# ~G(R ! H*` O#VoG-͹&/w##*w}*>ae"(R7w# 22 O *" } -D/"bB9/-p"u! pC*G8!#Н kG8*Ou!2#Н *!*4"(R&*  x͹o˷R"*=G(R* #!*)*# *" } -=*u/"bB9/ ک"^!* *G8u*Ou2u# O:$B(Ro Daw G!u/"bB9/ "u!**G8!u! u*Ou!2u!*#R!# G(RH H*` O#VoG-͹(*<8  2x*0= "(Rc# ~  Oe!!xG"*0 -*  6e aN(R)! xG-͹o#  aN(Rt!** # D>* aN(R!* #G <"*0 -!qu G-NG !#GO# O !aN(R͂e!!xG"*0 -<!(!q(*=!:$B(R "O.r(  2 O=*"N$*do# x"(R;### $}xG2O>H*( [ )=q.G-͝|S|k!*cG(R!E()}xG# O!R G(R *2,#!aN(RG#!#! }xG !Gt!̀ q"} #=(! (waCuG*"&GO# (R5*!/#r!x~>u(w& ! *uG*0}̀G w!a# $B(Rw !>!( Kz # w"2, aN(R#!8 ()> }(i !t!*c t!*^(ROo.*)*!  ss} -< "S"#  "(RC#" O!D#h>  (R..  (!"0-*U ,xW "(R> #0݉*#O| <!"|>|> u! aN(R.!O} -<>!(0"O *OX*=nG(R!а Oe x>(#M@u "  c@( * * *p GOM!Ne*y  xxG# O!R G(R *2,#!aN(RG#!#! }xG !Gt!̀ q"} #=(! ".he SETPAD.COM, a function key programmer for Kaypro Computers. .fo SETPAD version 1.0 is copyright (c) 1984 by Flat Iron Software. .mt2 SETPAD10.WS Documentation for SETPAD.COM, version 1.0 November 17, 1984 SETPAD.COM it source an an o it associate file ar place i th publi domai t provid mor flexibl wa o programmin th numbe pa o Kaypr computers An an al o th SETPAD files includin thi documentatio i Copyrigh (c 1984 b Fla Iro Software P.O Bo 2059 Colorad Springs Colorad 80841 SETPAD ma b freel distribute a lon a AL copyrigh message ar lef intact th progra i no use fo profit an th use assume al responsibilit fo an los incurre eithe fro thi progra o fro hi inabilit t correctl us thi program. SETPAD wa writte an designe t supplemen th CONFIǠ progra whic i distribute wit Kaypr computers Specifically SETPAD addresse th proble o turnin of th ke clic an redefinin th numbe pa fo WordStar dBaseI o othe programs I thi initia version SETPAD ha bee teste o th Kaypr 1 wit bot CP/ 2.2 an 2.2G I i abl t adjus fo differen siz CP/ systems s thos user wh hav altere th siz o thei syste wil stil b abl t ru th progra withou problem Becaus o lac o machine t tes thi on w ca onl assum tha al Kaypro' hav BIO whic i simila t tha o th Kaypr 10 SETPAD i entirel memor resident an n har ca b don t you compute tha canno b fixe b pushin th rese butto i th BIOӠ fo you machin i different from that on the Kaypro 10. As distributed, SETPAD has the following functions available: Turning the keyboard click on or off as desired. Settin u th numbe pa t generat eithe th defaul key (thos show o th keys) som WordSta specifi keys, or user defined keys. Running from the command line or optionally from a menu. Redefinin th numbe pa translat tabl i memor t allo for temporary and flexible key definition/redefinition. Operatio fro th men i fairl sel explanatory Th option available from the main menu include: [Nݠ Mak th keyboar noisy Thi optio wil tur th keyboard click back on if it was turned off at one time [Qݠ Mak th keyboar quiet Thi optio wil tur th keyboard click off. [D Se th numbe pa wit th defaul keys Thi optio wil pu th character whic ar show o th numbe pad back there if they have been changed. [Wݠ Se th numbe pa wit key t us wit WordStar Thi optio wil pu Th followin key o th numbe  pad: 0)^K^S^Q^P 1)^Z 2)^X 3)^C 4,5,6) no movement 7)^W 8)^E 9)^R -)^R ,)^C enter)^K^D .)^Q^C [U Se th numbe pa wit use define keys Thi optio wil le yo defin th numbe pa wit whateve yo wan to Th operatio i identica t tha i th CONFIǠ program Yo ca defin eac ke wit fou strokes. [E] Exit the SETPAD program. Option fro th comman wor i th sam wa wit th heirarch show above Thu i yo entere 'SETPAD dqnwu' th ne resul woul b tha th keyboar clic woul b turne off WordSta key woul b se up an yo woul b abl t modif th key i necessary Redundan option fro th comman lin (a show above d no matter th lowes comman i th heirarch wil b th las executed an therefore i wil b th result. An questions/problems/suggestions/gripe wil젠 b堠 greatl appreciated I ther i an incompatibilit betwee thi versio o SETPAD an earlie model o th Kaypr an 4 comment o tha wil hel also s tha seperat versio fo thes model ca b distributed Pleas sen al comment t th addres a th beginnin o thi document. Th sourc fo SETPAD wil no place i th publi domain howeve i wil b give t anyon wh i willin t as fo i an contribut someho t Fla Iro Software.  heirarch show above Thu i yo entere 'SETPAD dqnwu' th ne resul woul b tha th keyboar clic woul b turne off WordSta key woul b se up an yo woul b abl t modif th key i necessary Redundan option fro th comman lin (a show above d no matter th lowes comman i th heirarch wil b th las executed an therefore i wil b th result. An questions/problems/suggestions/gripe wil젠 b堠 greatl appreciated I ther # ::ZG:[P!~#_NFF<SAO7Á P@H`H`G`O> x> y~#0ڀ:|_AڀGҀ0 CURSOR v1.0 Copyright (c) 1983.$ Proper format: CURSOR TBE where: T=(O)ff, (N)on blink, (F)ast blink, (S)low blink B=cursor starting line, E=cursor ending line Both B and E are hex digits$DB19 COMv./0123456789:;<DB19 DOC)=>?@ABDDRAW COMCDEFGHIJKLMNOPQRDDRAW COM%STUVWDDRAW DOC9XYZ[\]^_DDRAW NOT`DUMP10 COMaDUMP24 COMbDUMP1084DOCcdeK4TIME COM fgK4TIME DOC hiKP-CHARSCOMKjklmnopqrsKP-CHARSDOCtKP4TIME COMuKP4TIME DOC vwKP4TIME2ASMxyz{|}~KP4TIME2ASM+SETPAD COMfSETPAD10WS $CURSOR $$$CURSOR.COM v1.0 Simply type CURSOR ? for built-in menu This programs allows you to set the Kaypro cursor for fast or slow blinking, on or off, starting line, and ending line number. ///////////////////////////////////////////////// ** ADD ** This program will ONLY work with new Kaypro's supporting the KP10 video codes. It will NOT work on older 2's and 4's. To Use: A0>cursor abc a: F = fast blink S = slow blink O = cursor OFF N = non-blinking cursor b and c must be hex values b: 0 - F hex starting pixel (upper) c: 0 - F hex last pixel (lower) Imagine this is your block cursor, the height of the cursor is set by the "b" and "c" parameters entered in hex values of 0 thru F. ------ <--- 0 hex | | ------ <--- 1 hex | | ------ etc... | | ------ etc... | | ------ <--- F hex By entering: A0>cursor s0f you get a "normal" full cursor blinking at the standard "slow" speed. /////////////////////////////////////////////////////////// Steve Sanders PRO-COM DATABASE (813) 937-3608 PRO-COM TECH RCPM (813) 937-6829 sor OFF N = non-blinking cursor b and c must be hex values b: 0 - F hex starting pixel (upper) c: 0 - F hex last pixel (lower) Imagine this is your block cursor, the height of the cursor is set by the "b" and "c" parameters entered in hex values of 0 thru F. ------ <--- 0 hex | | ------ <--- 1 hex | | ------ et This is the release date of the disk. DDRAW DOC XDDRAW NOT `DUMP10 COM aDUMP24 COM bDUMP1084DOC c K4TIME COM fK4TIME DOC hKP-CHARSCOM j%KP-CHARSDOC tKP4TIME COM uKP4TIME DOC vKP4TIME2ASM xUP4TIME2ASM SETPAD COM 3CURS-KAY.ASM 9C C9 256 2 DB19 .COM 61 C7 31488 246 DB19 .DOC 48 FE 5248 41 DDRAW .COM 8C 06 21120 165 DDRAW .DOC 82 CC 7296 57 DDRAW .NOT 20 62 640 5 DUMP10 .COM 4E E0 384 3 DUMP24 .COM 44 F7 384 3 DUMP1084.DOC 29 91 2944 23 K4TIME .COM 06 D7 1280 10 K4TIME .DOC 9A 0B 1664 13 KP-CHARS.COM C9 DE 9600 75 KP-CHARS Fog Library Disk FOG-CPM.030 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. Collection of programs for Kaypro computers. Filename Description -03-00 .86 This is the release date of t$he disk. -CPM030 .DOC This is the description of the disk contents. AUTKYS60.COM D2A2 7K [AutoKeys Kaypro 1 of 2] Configures Kaypro arrow and number keypad. AUTKYS60.WS 7B07 4K [AutoKeys Kaypro 2 of 2] CLOCK .COM EE6F 5K [Clock 1 of 3] Program to read the internal clock on 4-84 and 2X models. Written with Software Toolworks C80 (source included). CLOCK .DOC AB1F 2K [Clock 2 of 3] CLOCK .C 6E8C 4K [Clock 3 of 3] COLDBOOT.COM B4C9 1K [Coldboot 1 of 2] Program to enable "cold boot" without turning off the power. COLDBOOT.DOC A594 1K [Coldboot 2 of 2] CURS-KAY.COM A81E 1K [CURS-KAY 1 of 3] Make the cursor smaller and blink slowly. ASseMbler source is included. CURS-KAY.DOC F198 1K [CURS-KAY 2 of 3] CURS-KAY.ASM 9CC9 1K [CURS-KAY 3 of 3] DB19 .COM 61C7 31K ver. 1.9 [DataBase 1 of 2] Name, address, phone, and mailing database program which prints 1-up labels. DB19 .DOC 48FE 6K ver. 1.9 [DataBase 2 of 2] DDRAW .COM 8C06 21K [DDRAW 1 of 3] General purpose graphics/text utility for '84 models. It has line and circle drawing commands but has TPA limitations. DDRAW .DOC 82CC 8K [DDRAW 2 of 3] DDRAW .NOT 2062 1K [DDRAW 3 of 3] DUMP10 .COM 4EE0 1K [ScreenDump 1 of 3] Screen dumping program for Kaypro 10 and Kaypro 4 with patching information which may allow it to work with your computer. DUMP24 .COM 44F7 1K [ScreenDump 2 of 3] DUMP1084.DOC 2991 3K [ScreenDump 3 of 3] K4TIME .COM 06D7 2K [Kaypro 4 Timestamp 1 of 2] Time stamping for the 4/84 models. K4TIME .DOC 9A0B 2K [Kaypro 4 Timestamp 2 of 2] KP-CHARS.COM C9DE 10K [Kaypro Characters 1 of 2] Display screen characters on the 4/84, 10, and 2/84. KP-CHARS.DOC 7DB7 1K [Kaypro Characters 2 of 2] KP4TIME .COM 1F7C 1K [Kaypro 4 timeset 1 of 3] Display and set the real time clock on 4/84. ASseMbler source is included. KP4TIME .DOC C2B6 2K [Kaypro 4 timeset 2 of 3] KP4TIME2.ASM CA75 22K [Kaypro 4 timeset 3 of 3] SETPAD .COM B851 13K [Setpad 1 of 2] Turns off key click and re-defines number pad keys. SETPAD10.WS 9485 5K [Setpad 2 of 2] CURSOR .COM BB04 1K [CURSOR 1 of 2] Allows your to set cursor blink rate, etc. from a menu. CURSOR .DOC 23E0 2K [CURSOR 2 of 2] r source is included. KP4TIME .DOC C2B6 2K [Kaypro 4 timeset 2 of 3] KP4TIME2.ASM CA75 22K [Kaypro 4 timeset 3 of 3] SETPAD .COM B851 13K [Setpa%&'