!" >- Ͷ Aګ ҫ _!7^#V~  \p Z z ů2[\͓͢1!~(OOE# =ʻf "=« ý> 2͐ f "]=f =« *]}o"_  *] Hello There! You have just tried to boot your computer on one of your RELOAD diskettes. You shouldn't attempt to boot on this diskette, but rather boot on the 1st reload disk. It contains the procedure to accomplish the reload. CHECKC CMD CHECKC1 CMD CHECKS CMD CLEAR@ CMD CLIENT DBF CLIENTLSCMD COMPUTE DBF COMPUTE FRM COMPUTE1DBF DBASE COM  DBASEOVRCOM !"#$%& DBASEOVRCOMD'()*+ DEPTMASTDBF, DEPTMASTFRM- EMP8 DBF. EMPBAK DBF/ EMPBAK1 DBF0 EMPMAST DBF1 EMPMAST FRM2 EMPMASTRFRM3 EMPMFRM FRM 4 EMPMSRT DBF5 EMPNAME DBF6 EMPNAME FRM7 EMPNOINDNDX8 EMPTBAK DBF9 EMPTRANSDBF: EMPTSRT DBF; JJFRM FRM< JOBHFRM FRM= JOBHIST DBF> JOINJOB DBF ? JOINPAY1DBF@ JOINPAY2DBF A JOINPAY3DBF B LESSONS CMD(CDE MASTE DBFF NAMEADDRDBFG NAMEIND NDXH REGFRM FRM I T1RDBF DBF J TAXMAST DBFK TAXMAST FRML TEACH1 CMDPMNOPQ TEACH10 CMD(RST TEACH11 CMD(UVW TEACH1R CMD(XYZ TEACH1R1CMDH[\]^_ TEACH1S CMD`a TEACH2 CMD0bcd TEACH21 BAKef TEACH21 CMDgh TEACH2R CMD i TEACH3 CMD(jkl TEACH3C CMD$mno TEACH3F CMD$pqr TEACH3F1CMDs TEACH4 CMD8tuvw TEACH4B CMDx TEACH4L CMDyz TEACH5 CMD\{|}~ TEACH6 CMD, TEACH6M CMD,RELOAD 7 STORE 0 TO OK DO WHILE OK = 0 IF '&PROMPT' # ' ' ACCEPT '&PROMPT' TO COMMAND ELSE ACCEPT TO COMMAND ENDIF STORE !(COMMAND) TO COMMAND IF COMMAND = 'QUIT' QUIT ENDIF IF LESSON = '1' IF COMMAND # CHECK ?"You didn't enter:" ?" &CHECK" ?"Please try again." LOOP ELSE STORE 1 TO OK SET TALK ON &COMMAND SET TALK OFF LOOP ENDIF ENDIF IF COMMAND # CHECK ? ?"You didn't enter:" ?" &CHECK" ?"If you would like to try to correct the statement, enter Y when" ?"prompted. Otherwise, enter N, and then re-enter the entire command." DO TEACHC ENDIF IF COMMAND # CHECK ?"Please enter:" ?" &CHECK " LOOP ELSE STORE 1 TO OK SET TALK ON &COMMAND SET TALK OFF ENDIF ENDDO STORE ' ' TO PROMPT RETURN ?"You didn't enter &CHECK.. Please try again." LOOP "If you would like to try to correct the statement, enter Y when" ?"prompted. Otherwise, enter N, and then re-enter the entire command." DO TEACHC ENDIF IF COMMAND # CHECK ?"I'm afraid that's still not right. Please enter:" ?" &CHECK" LOOP ELSE STORE 1 TO OK SET TALK ON &COMMAND SET TALK OFF ENDIF ENDDO STORE ' ' TO PROMPT STORE 0 TO OK DO WHILE OK = 0 IF '&PROMPT' # ' ' ACCEPT '&PROMPT' TO COMMAND ELSE ACCEPT TO COMMAND ENDIF STORE !(COMMAND) TO COMMAND IF COMMAND = 'QUIT' QUIT ENDIF IF LESSON = '1' IF COMMAND # CHECK ?"You didn't enter:" ?" &CHECK" ?"Please try again." LOOP ELSE STORE 1 TO OK LOOP ENDIF ENDIF IF COMMAND # CHECK ? ?"You didn't enter:" ?" &CHECK" ?"If you would like to try to correct the statement, enter Y when" ?"prompted. Otherwise, enter N, and then re-enter the entire command." DO TEACHC ENDIF IF COMMAND # CHECK ?"Please enter:" ?" &CHECK " LOOP ELSE STORE 1 TO OK ENDIF ENDDO STORE ' ' TO PROMPT RETURN didn't enter &CHECK.. Please try a STORE 0 TO OK DO WHILE OK = 0 IF '&PROMPT' # ' ' ACCEPT '&PROMPT' TO COMMAND ELSE ACCEPT TO COMMAND ENDIF STORE !(COMMAND) TO COMMAND IF COMMAND = 'QUIT' QUIT ENDIF IF COMMAND # CHECK DO CLEAR@ ?"You didn't enter" ?" &CHECK" ?"Please try again." LOOP ELSE STORE 1 TO OK &COMMAND ENDIF ENDDO STORE ' ' TO PROMPT RETURN  ENDIF IF !(COMMAND) # CHECK DO CLEAR@ ?"You didn't enter" ?" &CHECK" ?"Please try again." LOOP ELSE STORE 1 TO OK &COMMAN@ 12,0 @ 13,0 @ 14,0 @ 15,0 @ 16,0 @ 17,0 @ 18,0 @ 19,0 @ 20,0 @ 21,0 @ 22,0 @ 11,0 RETURN XNAMEClADDRESSClWPHONEC mHPHONEC mPHPREFC'm ALBERT EINSTEIN LITTLE TOWN USA (201)555-1212(201)555-1313W ROBERT REDFORD LOS ANGELES CA. (213)555-0565(213)555-1000H KILGORE TROUT NOWHERE (312)555-0000(312)555-9999W BOB HOPE TOLUCA LAKE CA. (213)555-7777(213)555-8888H RONALD REAGAN WASHINGTON DC (212)555-5000CLASSIFIED Ho use a file called CLIENT, which" ?"contains client names anREMARK * USE CLIENT FILE REMARK USE CLIENT USE CLIENT WAIT ERASE REMARK * BEGIN THE DO LOOP TO READ THE CLIENT FILE UNTIL AN REMARK * END-OF-FILE CONDITION OCCURS REMARK DO WHILE .NOT. EOF DO WHILE .NOT. EOF REMARK * EXECUTE THE IF STATEMENT WHICH ANALYZES THE PHPREF REMARK * FIELD OF THE CURRENT RECORD TO SEE WHICH PHONE NUMBER REMARK * IS TO BE USED TO CONTACT THE CLIENT REMARK IF PHPREF = 'W' IF PHPREF = 'W' REMARK * IF IT'S THE WORK PHONE, STORE 'WPHONE' (WHICH IS THE REMARK * FIELD NAME ON THE CLIENT FILE FOR WORK PHONE) TO THE REMARK * MEMORY VARIABLE PREF REMARK STORE 'WPHONE' TO PREF STORE 'WPHONE' TO PREF ELSE REMARK ELSE REMARK * IF IT'S THE HOME PHONE, STORE 'HPHONE' (WHICH IS THE REMARK * FIELD NAME ON THE CLIENT FILE FOR HOME PHONE) TO THE REMARK * MEMORY VARIABLE PREF REMARK STORE HPHONE TO PREF STORE 'HPHONE' TO PREF ENDIF REMARK * DISPLAY THE CLIENT NAME AND PREFERRED TELEPHONE NUMBER, REMARK * SUBSTITUTING PREF (WHICH CONTAINS EITHER 'WPHONE' OR REMARK * 'HPHONE' DEPENDING ON THE IF STATEMENT ABOVE), AND DON'T REMARK * DISPLAY THE RECORD NUMBER (OFF PARAMETER) REMARK DISP NAME,&PREF OFF DISP NAME,&PREF OFF REMARK * SKIP TO THE NEXT RECORD REMARK SKIP SKIP WAIT ERASE REMARK * SEE IF THE DO LOOP SHOULD BE CONTINUED REMARK ENDDO ENDDO REMARK * AFTER EOF - RETURN TO CALLER - DBASE TUTOR IN THIS CASE WAIT SET ECHO OFF RETURN it is" ?"time to QUIT. Goodbye." ?"Please enter QUIT." STORE 'QUIT' TO CHECK DO CHECKC RETURN B=================================BB==BB==BB==BB==BB==BB}}BB==BB==BB==BB==B==BB=BB==BB==BB==JB==B==B==BB==B========B==BB}=B}}BB}}BB==BB}}BB}}BB==BB=======}=========}}}BB}}BB}}BB==B}}BB}=BB==BB==BB==BB==BB==BB==BB==BB=}BB==BB=}BB==BBB WASHINGTON DC LL WAIT ONE MORE TIME WAIT RETURN TAINS EITHER 'WPHONE' OR REMARK * 'HPHONE' DEPENDING ON THE IF STATEMENT ABOVE), AND DON'T REMARK * DISPLAY THE RECORD (OFF PARAMETER) REMARK DISP NAME,&PREF OFF DISP NAME,&PREF OFF REMARK * SKIP TO THE NEXT RECORD REMARK SKIP SKIP WAIT ERASE REMARK * SEE IF THE DO LOOP SHOULD BE CONTINUED REMARK ENDDO ENDDO REMARK * AFTER EOF - RETURN TO CALLER - DBASE TUTOR IN THIS CASE WAIT SET ECHO OFF RETURN it is" ?"!POSITIONC pYTDSALARYNpMONTHSALNpSALCLASSNpTAXESNpNETSALARYNp PRESIDENT 68800 2000 6 720 1280 VICE-PRES 57900 1500 4 360 1140 SEC-STATE 50875 1250 3 225 1025 JANITOR 87250 2500 1 150 2350TAXES and NET SALARY fields contain" ?"zeroes. I'm going to perform some comptations to" ?"place amounts in these fields." WAIT ERASE ?"Using the REPLACE command, I'm going to compute" ?"TAXES by multiplying the SALCLASS field by .06," ?"and then multiplying the MONTHSAL field by that" ?"product. The command to do that looks like this." ?"REPLACE ALL TAXES M=1,L=55,W=50 Y WHITE HOUSE PAYROLL LISTING Y Y N 10,POSITION POSITION TITLE 5,YTDSALARY YTD SAL Y 5,MONTHSAL MONTH SAL Y 5,SALCLASS SAL CLASS N 5,TAXES TAXES Y 5,NETSALARY NET SAL Y "called COMPUTE, which contains payroll information" ?"for some of the people in the White House." ?"This is what the structure of the file looks" ?"like." USE A:COMPUTE DISP STRU ?"I also created a report to print the file, and" ?"show some totals of the information." ?"I'll print the report for&POSITIONC pPHONECpYTDSALARYNpMONTHSALNpSALCLASSNpTAXESNpNETSALARYNp PRESIDENT 68800 2000 6 720 1280 VICE-PRES 57900 1500 4 360 1140 SEC-STATE 50875 1250 3 225 1025 JANITOR 87250 2500 1 150 2350u can DELETE files in dBASEII. The files may be dBASEII files" ?"or any other file (by using a file suffix, e.g., TXT)." ? ?"First let's make sure that the WHITEHSE file is still around." ?"Enter DISPLAY FILE" STORE 'DISPLAY FILE' TO CHECK DO CHECKC ?"Now, let's DELETE it." ?"Enter DELETE FILE WHITEHSE" STORE 'DELETE FILE WHITEHSE' TO CHECzG  =C1B1C1=7 PP &::Fx#Nͮ j! f:&E!f:&E!$f:&E!*f!0f:Vi©=§*& :O:_2 2 2% ! ͌ 6zä;:{ »:!W¢:!Xw#ʤ#N#ʸzL7zNLTNxwzNjzz_w#Z0"9zzzzz>_:% ʁ*& *# "& ʹ*! ~#"! O;: =2 72% >;*& "# "& ʹz: =h: k: _2 6zä2 * *& Z7N-:T=o%"& ʹ6zw* *& Z7ʹ6zä: E ø* "& ʹ >2 zAy z>2 : * wO;ä* : U7* " N:( 2) * Z7ByAB* ~qO&:) 2( * " wO;͖ ä: 2 k! n! !͌zî* +* Z7z6ʘz*& -"& :T=o%"& ʹ>2 : O* * yU7+" :( 2) * " * * Z7 6:* * NyA * q* 6 :) 2( * " ͖ z>2 * 6 * *& Z7H6',͖ z: _: _: •: *& * Z7•: •: _: N¸*& * Z7ʸ: ¸* 6: 2 z: z>@_: z>_: _: z: 0_: z: _͐: G: x: 2 ̓7"+ y7" xG:' 2' yO:& =2& ʹZ Ð͛!"& !Ѣ" !Ҥ" 2 2 2 ô*& ,"& :T=$."& * #" * | :( <2( U7~͸ 2* * +" * |/:( =2( U7~2͸ 2* :* ! 9O:* 9ʂ#ʂ!n_AgLxX7y 7y7?_Oy! 97y! 9yE7G*+  N##y7yʽ~µF÷T;͇5* |͸*+  p###q!" *+ N!3!#* |Nͮ #* " ʂ* w#" 9F#FAU!UXjwq~-qE7qnO~7jy!~q_wq~q> wOͮ #* 6#" ͐*& "& ʹͨ"& ʹz~Oͮ #è~#.»~ #: o&)))ѢÃ7: N; * : O.3:  *+  y7z5* | ͸ : G: O* 3* "& ʹ* Nͮ #1 : * ~_YW TW 66ͅ~| *+ |  ͮ :& l ͨ*+ |:Eʖ :bO;z*& * ~7" *+  ~͎*& - :T=o%* ~7*+ ~7* ~7" ͅ:E :cO;! 4ɯ2 " "& 2( ̓7" ̓7"+ y7" *+  ~O2 #~- <2 #̓7yv u v ͇5* |] ͸x2 y2 f : G2 O!" " 3À #" 2 " ʹ* |ʏ ~Ò ͸ 2* : 2 * "! * "# >2% ;: N >9L>X:E;DELETED INSERT TFYNtfyn.+- #9AXL!ѢҤ"!m"!m"Y:K !m"*~#"6 L7&/;DMY$0<JYl5o$4:  w Tu *+":C~ !"K *N9"K #"K *Y~7"Y̓7" F#N#y7xU m xC .3*z5M *9K *x` #y9 K xz ~*wÑ ~*_Tʏ Yʏ 6Ñ 6K OG"x ~@ڸ 2è +~ ʨ + — yû yû >2 y/<2ɯ2X2*6!m"͸6N#~2#^#V#~#F#"x2:X/<͢x2XW ʋ:_:<2X*~XK 7=å̓7̓7"! N#̓7> U7~#y7O9K ̓7"i##̓7NF9x@<<< > w> ##̓7NFxYH͏*9> ##y7~K ̓7"ڶ#F#̓7N~@ڝ >U < #F#̓7~4HG> ͔7# 9> ##̓7~N6T> 6F> I5MI5EI*p#3H K I5MI5E|¸"xҸyʟ=ڢ~O#xU7*q#9 K >{ < *w# K ~wK @}2VK >z < @*2VK @ 2VK @D1VK bbbbbbON#yU7F# 9xwU7#"K ON#F#x<ڟG7ʣ#å>*wK {{{{{{O*wK O*wK ~/wK I͡5VK ,ͭ4VK N#.3VK n&ͭ4VK **,ON#F#x<ڎG7xʤ#é/< < :*(*:65#q#p#657\xW͒Q<\xJ7>1ѷ.OR.͚x͒†<͚x|7>cѷ.AND.K8K8K8¶<x¹>7.NOT.exexɱ~$>#<ex7~= >]#*>]@>]> ^> ]>c#~=[>^> #<ɯ+ڹx~+“#<+ڸxʸͼ>q-ʜ#<+ڸxʸͼ>q7xG|GyMxGɱ~+#<+'x''yO> -##<+'x''yO>7ͥڢx:~*f#<ͥڡxʡyxGOxG>:/o#<ͥڡxʡx=|GڏGyҕMx:7ͨ~+-#<>#<Y-~È~![97l͔.€<PG>z>zC>zCA>z\*ځ1p*ځ1f>z~(€͈Ҁ66$#͈7|P>%zC>&z\eځxʁp͙8<~),{>2eځxʁ<~) peځxʁ~)>#<:O>3z\*ځ1peځxʁ~)|p͙8\<~)\{^>2eځxʁf:O>4z#<>>4zC>zP> z\f>!z͈xNyCL\O+ʁ<fU6+#6#p#|C>"z>z>zC>#z\f>'z\f>(z͈ڄ1Ä͈ڄxÄ~(„#<~)„#<~,„#<77~(¥#<*ڥ~)¥#<7Ϳx.36*#z5!<7~87x#ͺ7O6+## #<7~_TYFN7>6,#w##<͢VUU#F###N>)~7*V7͢{z#N6)#~7*V7͢ڟž6)#~7*V7O+ʼ<"V¼<7>#222~+-#~0:.2: >2:=2>w: O:+Hyx:<ɯ~ J J#=.F..T.CDEFILPRSTV#@$!*INT #VAL5LEN&@BTESTmPEEKRANKSTR$!CHRDATETYPETRIM*EOF FILELOCK#LOCKNDX3(k*!g!c*0~**0*0"0|-*0#"02020r7DM*0> U79 6xJ2t0y2q02r0_!|^x2s0p!"m0#"o0$20!H$$0ʹʥͮÙ:0ͮ#z!÷կ2{0,""%#20!""z*0"0*m0"y0$:0"*w0!:q0O9*w0:q0U76#6*0#6#6>2020t$E$>20*w0>2~0!:q0O8%E%+++̓7z_t$"y0$"t$*0"|0͉$"u0:0O:0ڗ<(%DM:0<ͱ$+:0ͱ$+*9*u0!:q0O9*u0:q0U7*z~7!04:s0E$:0$*|0"0~20<g:{0%|20*y0"H$:0g:{0$|2{020ͱ$:q09:020O:020(%DM:0<ͱ$++*w0++9*o0"zH$:0O:0[20*o0"y0t$͉$*o0#"o0>20*0*0Z7*0#!:r0O9*w0:q0U7*z~7>20*o0H$*o0"m0#"o0$*0*|0r7DM*|0+T]*9#"0*m0*0~76͉$$ͮ$m$A#| Z7 &"!# $"0z!"%!:g07 "0*0*0Z7M &"J "0ͮ$:g0O8%# !$#͉$ $:0O:0ʡ y !05X Û O(%DMͮ$++:0<ͱ$++9!05t$E$!05!05E$:0X ͮ$:q0O9͉$ $ͮ$!:q0O9E$:0O:0ʳ ɷO2~0"u0#*0"0*m0"y0$:0n!>20*0*u08%E!+!%!++̓7zn!t$"y0$ !++̓7z_!t$"y0$ !t$y720*0"0!$*0 *:ڷ!#̓7z>C+++61ʩ!>N6/2f0{2g0#[0~7$0!P z!ͷ!!!:0!#, |,P ͷ>O&" "ͮ$8% "y7!#͉$ڍ"$%ҁ"͉$ڍ"$:0O:0Q":":0<20ͱ$++̓7t$"y0>20t$$*0#̓7zc"Ä"t$ͮ$y7Ö">207ɷ#͉$#$:0=20#͉$#$:0ʲ"=20*0#"ʹ$̓7t$"y0$:0<20t$:0<ͱ$++̓7z"͉$!05t$ #t$ͮ$y7#>207ɷ20ͼ<y.:0*0nͼ<y.>20*0"0#*m0"y0$t$:0w#*0#y7|R#*0###y7>20!*0"0#*m0"y0$:0<20t$:0#<ͱ$++y7|Œ#:0ͱ$y7͉$!05t$!0#ͼ<y.#20O!0~###q:0*0k0 9*0###"w0*y0"0:00ͼ< y.:0*0ͼ<y.*0~20*y0"0:00ͼ< y.*0:0w:0ͼ<y.*y0*0~7:0w#"0*0*0Z7š$7+~20+V+^"y0"0ѷ:0*w0=O:r0W yO$x$G$ $33:0!0:0ͼ<y.*0!k0 9*0:0ͼ<y.:r0U7!04:0!- O:r0_! 2%##:t0i%͔5:~0V%.3Y%͇5 2vz57:"Eu%7A:q0O8:0O:0£%:0ʟ%a/2020:0ͼ<y.20! "0~ % ~#*0~7U7"0#þ%*0}o|g~7ͼ<% y.7ͩ'ͫ(!06ͼ< y.!U0͒7:F&00͔.E&*:!?&'&F&͌&>2U0͌&>2W0e&͌&>2X0:͙8z7*:"0>2Z0Å&>2V0}:Y0'=2Y0"0:U0ʥ&&:W0ʲ&*0&:X0&*0|&*0Z7 'T]' |'!&:V0&:Z0&*0|<9-!"0>3y.>~y.> y./E:0ͼ<y.:020:020:0ͼ<y.0ͼ<L'77c'c'v'~h' P'=:020:0!0U7y7:020w:020!00ͼ< y.:V0':Z0'=!}- !}- =7"0"0||-Ø,!0͒70:ʛ(#~:(+~7ڛ(͠(:͠(:9ʛ( ʛ(.ʛ( ʛ(͠(:ʆ( ʛ( ʆ(,ʆ(.h(͠(3(:ʆ( ʆ(,ʆ(.S(͠(:ʗ( ʗ(,ʗ(͠(m(Û(!0U797aڧ(_0~@>:#~ »(>.#~(O+G)x )(G):&1D)X)D):1D)L)D):0-):1 )P)D):&1G)\)D):&1:)\)D):1G)P)ɯ<## *1N'## *:1N'!c͒7!g͒7!g6 :0> <9"0!*: 6/E'>@R,ڷ)́'.9-*0*:> U7~2>1x*y*6A##̓7z*:>1D*D*+pJ*6#6*6#6 #̓7zJ*D*͏*[*p#+N͒7~7W*##W*͏*\*p#~7qg*6>   ;+O~7D+_# ;+~7ڢ+ #~.Š+ #_Pq+Ë+S{+Ë+M…+Ë+ +Ë+~7ҝ+E7ҝ+:¢+# Ë+yͬ6*0+"0}$+͘,: E+ʸ++&"+': E+++̀#7:)E,.$,͘,,.<&",'.<̀#.7ɯ<}N,##~N,++6#6#65!}- ~2C1570ͼ<e,20y.7"0|-x~,> ͅ6# yx,*0"0>20*0*0DM:0ͼ<ü,*0#"020< , y.>207 <9-7:0ͼ<,, y.7*0:0!090ͼ< %-y.!"0|-$^-20A#': Ez-&"'N-20!': Ez-͘,m-!0͒7*0|-+*0Z7-"0"0*0"0! "0!0-ҿ-0!0-!0-*0|­-0:0ͼ< y.> y.w# -~w# -~w+ .:0ͼ<y. .:0 *0ͼ<y.*0DM*0~^.#y7"0*0ͳ%*0++y7"0̓%́'>y.*0DM*0> ͔7 20:0*0#"0"0 . *06#*0~7:Dw#:Ew#:Ew:0ͼ<y.G92?1:2@1:2A1:2B1?1xͼ< y.*06#"00ͼ< y.!~"0*0:0w#:0w#:0w#:0w#"0*0+~/"0G*0~Z7.0+~<.0"0xͼ< y.ALLH&NEXTR&RECORD]&FOR&WHILEx&KEY C.DBF.CMD.FRM.MEM.TXT.NDX.FMT.$$$.HEX~01X|(qsX|(qsOwy!q~a1!q~2252G.~2ʩ1t1/< چ1~2qP1~ڔ1WXØ1P_i,]5z˜1i~怲w.Fq1.'w- »12.>^5.42.7>'w- 12.ƙw- 1.7~'w- 2.~w4.62!q~wD1!qq25.;5 .]5V2GD1O2.4 @2.~GO.~WIwxw2~w4!q~2q.~!32q.6@.6> 2qD1.~2 2ß2 2.~=wy.C5:q=š22y 2.C5:q=22q.C52> .C5:q=22q2:qG.N@._y怳wq2547:q2q!q ;5 G3 393.6?+X3-^36 30ʙ3ڽ3:3.6G.~4چ3ƾoxwÌ3ƾo~w.~X3.4X3.~ʰ3.4.~X3.4X3.~X3.5X3.3.~36X3.~3.wy3x=G!q~.6036-@>4/<.w>  44.~yʪ4>..F>0-4 4ê4.¯C50 -4ê4<.q/<^4Q4xڡ4O>  h4T4.~4t4.~-r4> .¯C50t4.~ʪ4O>..¯C50 4ê4>*¡47!q ;5'44d4 44>I2q4}o|g4 z!qC5!q~,,,,,-5!q~O,~%5 -5.C5.5.~怱w.w~#25ɯw,<5_~Wwz+F5ɯ_~Wwz,e5!q25q25q25!q~@6 5 / ͅ66yy>ͅ6+ 2:Í62:ͬ6::E;:Eʩ6:ͼ<v::!E/E> ͅ6> ͅ6͸6~ͅ6#66&o6&o6'77d7 77a7Å67777> Å6A[?a{?:,7:G'"[]0:?U7y7o$z{/}o|gd7 z}o|g~#fos#r#^#V#q#p#N#F#>Wxʢ7r# ×7> #ç7žʸ7# ®7 G~77# ¿7y7# 7~77_G77_8# 7x"88x2:$8y2:H$87H8xH838::O~ F8# 88H8xO~aV8_—888O~Ao8_y8#^8xڕ8~0ړ8;ڕ8Aړ8Õ8DM! ©8ß8 08:80Z78zT])))oҩ8$©87 `i);_8ͅ6> ͅ6N Y9ɷ7͸6>?ͅ68H99y'9~# 9x99~+ ,9͠9œ99ʛ9W`i9ʉ9u9G9ʚ9OT]xU79É9/ a;:CM;a;G:/D};xy;t>_Ô;O; ڊ;!C4Ô; ”;!C6O:4DyY ڭ;!C4 !C6!C4:a =ü;:4D;  2C2C:C:C2/D:/D;:4D24D2C6@:C2DC:e!:C4K>s>>>>>>m??@!DD"BD~ =͕Aʓ=%=:.D@%=͕A%=> dC y6=*BD<6@B<2C*BD!\$9*BD=:.Dt=*BD=>dC>*;D+6dC*BD~w*;D+6HCy<2C!"=D"?D2AD*BD6#";DHC?@fAҿ=> dC6@/@=>dC/@KCA>29D*C"5D;?HCA29D*C"5D;?HCA>29D*C"5D;?HCA>29D*C#"5D;?HCAz<>ͫA͔@HC!"?D"=D;@HCA29D!"5D*C!*D"C;?*=D+"=D"CHCA29DͫA͔@*;D+:_ʒ>6HC6HCA*=D}|*?D}|*BD"CKCA*CxN#F#^#V>"?D`i"=DHCixg"=Dz{gxo"?DHC:.DS?!DD"BD2C*BD~??^#VO:.D> dC?6:C<8?2C*BD"BD>!:.D=J?J?)=??%KC6@ _KC*C?@fA?> dCM!\9*C?@6@/@<ʢ?>dC]!\9MdC2-D:-D*5D|YB*5DZ7?DM*?D@*=D*'D*C:9D@nC"C*'Dr7"=D"@nC"C*'Dr7"=D͗B*5Dr7"5D?\!\6# > ͔7͒7: E2\!]w#:s@+~@2\.ʃ@ʑ@w#s@!eʑ@w#Æ@:AD@¡@:_6@*BD:_ʱ@:AD@2AD))*BD! ~7!D"+D~@A:.D@ @#y7Z7@###̓7"'D6*7D "7D~A!D"7D#####~%A5A#~:A dC!DD~:BB!DD~:B'B> dC#";D=D9!"=D"?D2AD>*=D!r7|*?D#"?D!"=D!~A#̓7y7"'DB##6#6 dC;@*'D*BD"7C2C*BD!̓7++~7B:AD@2AD>dC>dC*;D!=D9 dCx~ ʱC ʶCʷC# ÜC#>2-Dx~ # CýC>2-DDBASEOVRCOMDBASEOVRCOMDȖ4X|ė 0Tx!E~LE=5!EU7~}'̓%//E!$E~}'6̓%!D~}'6̓%2 E2%E2E͞'>!Gr<1ޙ:*Z7uHuH!G6INSUFFICIENT MEMORY IN SYSTEM, dBASE REQUIRES AT LEAST 41984 BYTES (0A400 HEX) OF MEMORY IN IN ADDITION TO THE SIZE OF THE OPERATING SYSTEM dBASE WILL OPERATE ON MOST 48K CP/M (tm) SYSTEMS THAT HAVE A STANDARD BIOS d)2c:H!*:U76>'R,H:E!EU7y'w2 E!E4Ϳ/:v <:`:I!HK6@I!VK65::I͙8{2D2FK*::͙8{2E2EK*::sI>wI͙8{2E2GK:`ʒI:EKG:FK2EKx2FK:FKII I:EKhJ:FKII I II:EK hJI:EKhJI:EKhJ:GKJI:FKI:EKhJ͸6͸6! JKJ@PR@brpf@Z@\TTT@@Ȅ@@@@@@@d\~XJE;#KJ!dK6: EhEdE͸6!uJ6IThirty days hath September April, June and November All the rest have thirty one Except February ... ERROR!J!KERRORK~@@ KE;#J##~#fo63(4/.!4% .#ERROR (DD/MM/YY) : (MM/DD/YY) :41 1 February 1984 hath September April, June and November All the rest have thirty one Except February ... ERROR!J!KERRORK~@@ !=Pad q ~!@(?ȷ:77x7:8A?<27Q(:.*(w#x:776?#:7[;7 OS:=2ya8{0 ͭ * !~#"dBASE II COPYRIGHT (C) 1983 BY ASHTON-TATE INC.10150 W. JEFFERSON CULVER CITY, CA 91204 *** dBASE II Ver 2. File is inaccessible, already open elsewhere File does not exist Unassigned file number File is currently open End of file found unexpectedly" Record out of range Too many files are open Disk is full Directory is full File already exists No find Too many memory variables Out of memory for memory variables Illegal variable name Too many characters No database file in use, enter filename:# Not a dBASE II database No room in system lock list System input/output error records added DO cancelled Bad name field Bad type field Bad decimal width field Bad width field Destroy existing file? (y/n)~ *** Unknown command Count = Enter record structure as follows:: Field Name, Type, Width, Decimal places Input data now? Macro is not a character string records copied Bad file name Command file cannot be found7 Nesting limit violation exceeded deletion(s) *** End run dBASE II *** , Too many returns encountered7 Enter record #, field (# or name), new value Illegal data type Called from Correct and retry? File has been deleted Illegal goto value2 Syntax error, re-enter Cannot insert - there are no records in database file End of file encountered End of locate scope Macro not found Pack complete records copied recall(s) Col Width, Contents Double space report? (y/n) replacement(s) Enter report form name: Enter heading: Data item not found WITH phrase not found Enter subtotals field: Subtotals in report? (y/n)& Page heading? (y/n) Enter page heading:  records sorted TO phrase not found ** Subtotal ** No expression to sum: Non-numeric expression> More than 5 fields to sum *** Syntax error *** Are totals required? (y/n) Record is locked... waiting Summary report only? (y/n)9 Index file cannot be opened Variable cannot be found Source and destination data types are different ON phrase not found *** Numeric field overflow Syntax error in format specification FIELD phrase not found Cannot open file Format file cannot be openedQ Coord: Correct and retry? (y/n) Change from: Change to: More corrections (y/n)? Enter filename: ** Total ** Record: No find Page no. Single step y:=step, n:=keyboard cmd, ESC:=cancel Waiting 7 Fld Name Type Width Dec Structure for file: = Enter options, m=left margin, l=lines/page, w=page width Enter subtotal heading: 7 Enter subtotal footing: Eject page after subtotals? (y/n) No FOR phrase Join attempted to generate more than 65,534 records No FROM phraseH Keys are not the same length Primary use databaseY Secondary use database Number of records: Database in use not indexed More than 7 index files selected4 Modify erases all records... proceed? (y/n) Enter today's date or return for none Date of last update: records indexed Record length exceeds maximum size (of 1000) *** Zero divide *** Beyond string *** Overlay cannot be opened Enter record # : Record not in index Index does not match database *** MAXIMUM RECORD LIMIT REACHED ***I Index does not match database Bad width field Destroy existing file? 1ޙ: Ej]29b: EʈG:"G:!E/E:,EhG: EEG<2Cb><;21b;>d <8: EaG:Cb<:1b;/EʈG: E/: Ef:eX9G#~ʖG/w}G͸6>.ͅ675:.::GG*G:%E H9G`K8G!:b4G9Gp`K8G::bG2%EG9GaK8G::bH2%EG=2:bG:\G:ʊH!H#~H!͒7!͒7#O+~.DH 9!k*„H ~C8J##y7N#9.:<9BJ2u H: H.:::E:I9ʴHm`K8»H,SaK8»H!.b4G:.b"I:E I9HaK8H*::.r]:r]G2EG9I,aK8I9I$aK8G2EG93I$aK8G!.b5G9zI:EzI: EdI<2Cb><;21b;ͧ:: EzI:Cb<:1b;.::IG^͔.’I*:~E73J̀)6S:L7SRGaQRNNRQ&R[TU XeXX'KGJJIN[NyNNNNNNN~OU|RRR3SRSSSYTdTlTxTTRU"U*UUU`V}VVVVWXXXXXZ[)\1\\\d\g\o\].RR>!d]>&d]> d]>8d]͢J>:ͅ65:9hJ:!E/E͸6KJͺ7wJ> >O!6+##yU76/#~765)G!- G͸6:87J:~r]#²J*:r7DM t,:`K8FT#,S*̀):``K8J>!Gr<͋,|K'͘,Ki.5/'z!͌,͏,͋,'͘,GͫK:-EʙK<2Cb><;21b;*MbDMxUKdK;/22b:r]b61#Ns#FrxbL2$by2'b>N2#bÀL2'byvLA2$b>C2#bÀL2$b>L2#b!xU76:aK8L,S87r]:xݠͺ7r]#*:!ݠU762ܠ>2/b:`K8"M,SDNO+DN"*bL>Rd],S"M`K8DN,S87r]:xAͺ7r]*:!A",bU762@:2b!- :/b!ݠ:#bNN~KM.KM#=M"Db!~_M._M#QM"Fb*Db+~M$ʨM*ʨM#ʲM9ʲM,gMʕM-ʲM gM+~$ʣM*ʣM> #wgMgM gMʻMwfM6 gM*Fb*Db~=NM#M~=N#M9MwM~=N#M9M#M60#M!ݠ~=NX N7Nw# N9*N#2NE77Nw# N6 # N!ݠ"(b>Vd]: G̀)> !Gr<:nNk*r] y7!G*E> 2EG̀)>!Gr<:ʲN`K8ʬN`K8r]ͼG>!Gr<̀)>!Gr<̀)>!Gr<>!Gr<&:`K8O*:'@'O͞':.EG>2 <G <͞'G̀)>*27b)O:.EG>+ <G&&r]:r]͋,|qO!͘&qO:7bW͵'hOqOhOr5/ͥ+qOPO`i:.E͸66!"3b!"5b`:K8¡Ò)>!Gr<*:`K8CQ`K8KQ`K8VQ̀)29b20b&!"=b:PP&&r]:PP`K8O>20b*:O}`K8P*:*=br]>29b:*E:P62#͍7x5Py0P66P6>Pp4>P6.###6#65"=b-7PPO:*EP:9bP"Db*Db~ P*=b6)#~762# ~#N###FNʥPCʜP6#6#6êPq#p#6ëPp#q#q4#6#65"=b*Db"DbdP*5b͘&G,|G͵'7QG*3b+"3b|P!"3b>e <);G͸6:0bQ,67ͅ6:9b1Q:*E1Q)DM #t,7Q!- ͥ+GPG>! Gr<*:>!Gr<*:>!Gr<:aK8&RaK8ʼQ9>'گQ:r]R,گQ:EҴQ!EU7y'w2 E!E4Ϳ/͞'G>)öQ>* ) <G>2EG:0_:0>R! Gr<>2%E2:bG2EG/28b: EG0G<;<GͳG̀)$'S:87RR:xͺ7O9y '|S: EGG9"R:.EG> <G>sd]*::̀)`:K8HS,SxS`K8WS9-Gf`K8xS$oS͋,'G̀#'G ,r]|ʟS͋,Z7=JT]' |ʤSG>3d]>~d]> !Gr<.r]:r]G>2%E2:bG̀):S>!Gr:ͅ65:9 T:!E/E͸6SNT6/#͍7++~7)KT:.E=T60#~765͸6!- G>Hd]G>4 <͸6S̀)>! Gr<> !Gr!Gr<̀)9ޙ~ʔT#ÉT!ޙ*:&&&r]9r]:Z0r]!͘&TͿ)"'E͵'Tͥ+TҺT:.EG>6 <G:.EG>7 <G:.EG>a <,6G!ޙ*:&&&r]*'E)T>!Gr<>!Gr< ,r]"Db-7r] ,r]}*Dbw#"Db-7G9UG!"=b:U?kU͸6nU:*=br]:*EŸU62#͍7xšUy•U6ÛU6ãUp4ãU6.###6#65"=b-7ʸUr]nU!- G͸6G>!Gr<20b:U`K8r]>20b: G:#E1V}' .͞'ͳ:#Ef:1V:V*V@:ͫK>*MbDM*(b!*bzV>GGy'G,|G5/:0bGͺ!G̀)&> 27b)O:.EG>; <G̀)>!Gr<96G:r]'-:r]`K8r],S'-G̀)20b,|W&!"=b!";b:ʑW`K8V*:>20bV&&r]9ʑW:O+W>d]9(W"Aba9yU7,SK8W*:*=br]N##~PWC+~PWL*Ab ~bW>Sd]*Ab61#~765"=b>29b-7ʑWڂWW\`K8V*:W:9bW!͘&W͵'WWW!- '5/:0bWͺ!%'ͥ+WҤW:.EG`i͸66>> <G>Ad]>Bd]>!Gr<>! Gr<:X`K8*X,S$X>!GrÕ]9k*HX**:-7Gr]*X:_X.G: EG}'̓%͞'/:EʨX=XʛX2E=!EU7~2 E2%EG2 E2E2%EG>- <G>!Gr<:`K8X.G`K8r]>.G:6a͔.X*:kZwGa͔. YHbK8r]G*:kZ;G:`K8YY*::D9Y}''̓%͞'2D:G>'>R,y'2D͞'GkZbY:D2EGkZ<G:`K8€Y*:<!c͒79cͺ72G\Z ,r]"EG:#EʽY}'̓%2#E͞'\ZY`K8Y`K8Y>'>R,Y>Yd]y'2#E͞'G2-EG>2-EG\Zr]~_@2 EG\Z͙8{2D*::͙8{2E*::͙8{2EG\Z ,r]}2aG\Z#9Gʹ\G:`K8r],S:`K8ʂZ`K8•]>̀):[X`K8}[ ,r]|G:C1[$Z,"Fb͚"Z"Fbz¼Z*Fb'̓[ʼZh[A#'h[,r7Z|Z'̓[Zh[9-h[$<[,"Fb&"-["Fbz[*Fb'̓[[h['̀#'%'h[,͋,Z7Y['>20h['̓[h[͘,\[:.EG>a <,6Gͥ+G: E>!Gr<r]"=b:`K8$\*:*=b#N#F:**=b6/#~7"=b"Ab9O+*:-7[r]*Ab*=b6)#~7"=bú[:.E\*Ab*=b60#~7"=b*=b65:.Eĸ6!- G>Hd]>!Gr !Gr<G> !Gr<͞' .̓%́'#:G'\>@R,\́'.9-:G`K8r],Sʹ\G>'\>@R,\y'#-7\\ ¶\>td]##z!\͞'9->d]>(d]>Qd]>d]>e <);]:!E/E:`]`K8r]*::r]k*;]** y76# T]> wͅ6> ͅ6GG <Õ]: Eʕ]>M <͸69.:r7M ]7Æ]>?ͅ6͞'2 E.::yNͧ:: E]:E28b!8b5]>0 <:8b!EU7~&ö]:]/E>[ <8/EG>\ ] ^ <8/E]1ޙ.:ÖGSTORE[?TUELSERENDDORENDIFGDOaQNOTEGLOOPRRELEASE XRETURNeXSELECTX@'KACCEPTGJAPPENDJCALL[NCANCELyNCHANGENCLEARNCOPYNCOUNTNCREATENDELETENDISPLAY~OCONTINUEUEDIT|REJECTRERASERGOTO3SGO3SHELPSIFSFINDRINDEXSINPUTSINSERTYTLISTlTLOADxTLOCATETUNLOCKd\MODIFYUPACK"UPOKE*UQUITUREADURECALL`VREINDEX}VREMARKVRENAMEVREPLACEVREPORTWRESETXXRESTOREXSAVEXSETXSKIPZSORT[SUM)\TEXT1\USEo\WAIT]CASENENDCASEROTHERWISENBROWSEINJOINdTTOTAL\\UPDATEg\ALLANDBLANKBOTTOMDOELSEENDTEXTFIELDSFILEFILESSCREENGETGETSIFINDEXMEMORYNOUPDATEOFFONPICTUREPRIMARYPRINTRECORDSAYSECONDARYSTATUSSTRUCTURETOTOPUSINGWHILEWITHENDDOENDIFCASEENDCASEOTHERWISEBELLECARRYECOLONECONFIRM EDEBUG EDELETED EECHOEEJECT+EESCAPE!EEXACT"EINTENSITY&ELINKAGE)ERAW*ESTEP,ESCREEN TALK.EALTERNATEYCALLYCONSOLEYDATEZDEFAULTZFORMATYHEADINGqYINDEXJZMARGIN:ZPRINThYdrNZqZrNCqrPOrPE.IDBASEMCOLORCONSOLEYDATEZDEFAULTZFORMATYHEADINGqYIN Number of records: Database in use not indexedGJK1OBQ:!E2Ỳ)2WY2SY2TY&:ʀG&&CX:ʀGXK8UG*:"eY'J>2WY%GYK8iG*:>2SY%GXK8CX*:>2SY2TY%G͋,"oY|ʎG'͘,ҎG:WYI!"~Y!d"xYz!:SY5I*eY*:>'>AR,Jy'2D͞'i.:TYʛH!*::D}'%ږJ"zY*zY~ ʯH ~NWH#F#̓79'H H"+HO:wH2H,ʈH,EH:ʯH2HwH:ʯHwH,EHÈH#F#̓7N9d.3*:39,ʈHy,ʈH:ʯH,}H:ʯH*zY"zYG#:D}'%ږJ͵'GږJ͞'5/͌*~Y#"~Y*oY#"oY*xY+"xY|G2XH:YHÐJ:.EG*~Y͸66> <:Y2!E!d"xYG͈S&Iz!͌*oY#"oYI'͋,'͘,J>AR,Jy'2D ,:J!ͳ%!Ң"jY!"zY~ J"GY(I"OY ~NʣI*jY6-#*GY~7*OY~765"jYI*GY ~NI*jY6)#*GY~76#61#*OY~765"jYI*jY6)#*GY~761#*OY~765"jYI*zY"zYiIi.z!*DM:D}',ږJ: J6 !Ң- ͵'JږJ͞'5/͌*~Y#"~Y*oY#"oY*xY+"xY|J2XlJ:YlJÐJ:.EJ*~Y͸66> <:Y2!E!d"xYJ:D}'̓%:.EʴJ*~Y͸66> <:Y2!E͞''͋,'͘,*oY͏,KX> <>2 EKX̓%> <>2 EKX̀)&2UY:~K&&CX:~KXK8K>W <>2 EKX>2UY*:!ݠ"~Y~7:O+EK> <>2 EKX9(\K>R <>2 EKX*~Y~7"~Y~7*::,J:/K:UY’K>W <>2 EKX!͘&͵'KKK͸6>a <,6͸6!ݠ"~Y*~Y̓7"~YzKgRKþK5/ͥ+KҘKKX̓%́'#́':L>_ <5:KXKX'KX>R,O2D:.LXK8CXðM># <>$ <͒7!"~Y!"zY*zY#"zY͸67*zY+))))"|Y:zY!gM675:9gMbk͒76 9O+~,N9N'N*|Y9~,L7ڽL_ #ïLyNN N*:! :_2YYCLNLLN>NM::͙8N{NzN{ *zY+|N!͏,a/'̓%>% <8KX>AR,.'9-i.͈SҞM'a/̓%KX*::')OR,)O.9"hY ͒7!"~Y*hY͘,ڢN~ M#*:9O+ 9 N: N9_C:NN:NL O>N:CY9*:!CY͙8O{NzN{9CY9*:!CY͙8O{*~YU7Z7!O"~Y*hY"hYM̓%*hY6 :D}'!͏, .a/'́'.9-KX>    y 2   <;X> <;X> <;X>y <;X>( <;X̀)!"qY,|KX"`Y"]Y>2XY:O2XY: fO>. <:XYKX: |O>Z <ÁO>} <5:OͼKX9 KX͙8*:͋,Z7:Q:|²O*`Y"`Y'*`Y : ʚP"vY:#EO͹TGfOGO͐PxfOxBP$P*`Y*vYͫW>fOGP͐PxfOxQPxBP$3P͚"fOòO*`Y+"`Y|fOòO$ʀP&"fOòOxnP*vYZ7$P"vYO*?Y~ BP*?Y"vYO͘,fO*`Y#"`YòO5/ͺ!9%Q,fO:,Q:P0Q͙8*:fOzfO{!fO+))))~fO fO"]YQ9O+fO9("]YfO*:9%Q:ͭ7r7M9*]YRfO1Q*]YgRKXfO5/fO> 2QY*:LQXK8CX>2RY*:LQ$G,:QYŒQ#"Y"~Yn,)DM,R*Yn,:RYʹQi.5/Q)Y!9͈SKX)!Y99,*Y#"Yn,5/Q͋,#͏,'9-*~Y'KX>5 <9-KX ~NJR#y=^RN#y7T]> ͔79.3#F#̓7N3> <7"cY V#~2bY#y7"lYzCʣRMS!X65:|SO9*cYRڃRvS!͒72_Y:bYG 9!"lYMS!X6! 6%S:qSS!$Y6! 6!<9ڀS>2_YR!͒7!$Y6! 6%S>2_YR:_Y|S:bYGCSw#4SvS6 #CSvS*cY͸66>:ͅ67*lY:bY_~ͅ6#eS7>ɯ> 2nY2gY"vY:#ES͹T>TҵT5/,#*vYͫW:nYTGO:gY2gYx>Tx"T*vYZ7>T"vY>2nYSx>T*?Y~ >T*?Y"vY>2nYS:gYLT5/7͸6! Y6,#6͸6*sY͸6 t,>:ͅ675:O9ʊS“TxʵTÞT*sYReT*sY"sY~ hT5/7}' .ͳ:#Ef:T:@T:T>*YDM*IY!KYzT͞'ɯ2VY2ZY:-EU: U!"KY!"MY:$)U:,./U ,CX}2Y-7ڞW:$PU: .VU ,CX}2Y22!"IY:YK8 V*:>2ZY:CXX61#Ns#FrxʨU2Xy2X>N2XU2XyʼUA2X>C2XU2X>L2X!xU76:.YK8 V*::87CX:xݠͺ7CX#*:!ݠU762ܠ>2VY:XK8|V*::ʞWO+ʞW"KY>V>R <>2 EKX*::|VYK8žW*::87CX:xAͺ7CX*:!A"MYU762@:ZY!- :VY!ݠ:XN_W~ʥV.ʥV#×V"zY!~ʹV.ʹV#ëV"~Y*zY+~W$W*W# W9 W,VV- W V+~$V*V> #wVV VWwV6 V*~Y*zY~ʗWFW#FW~ʗW#AW9,Ww+W~ʗW#YW9YW#FW60#FW!ݠ~ʗWXzWʑWw#eW9ʄW#ŒWE7ڑWw#eW6 #eW!ݠ"IY>V <>2 EKX"?Yͳ!Y66!"[Y*?Y N! :T_ r7Wy2uY*[YO:U!4Y > ͔7*?Y4Y~X#W4Y*[YDM!?Yz*[Y:uYg"[Y*?Y"?Y~ W>2!E:>2 EKX>2 EKXͼ>!Gr 0.*9͘.Ͱ+1 -;,'PICTURERECORD SAYSDFRECORD # TO USINGº0ͤ6++":9&i".9.> 0.*9͘.Ͱ+1 -;,G2LîM PûPÏQéRSêStT&2W2W2W2W2W2W9!",W:UH&&U:UHgVK8vG"W*:'L>2WFGVK8G>2W*:!6 ".W:O+G>$L9(ʭG>R$L*.W9!6 ".W*,W6-#~7~765",W*::,FG:ÏG]VK8H>2W*::VK8FG>2W*:FGVK8#H>2W*:FGUK8U>2W2W*::{VK8FG*::U2 W:FG:W"L*W*::WmHoH>'>R,y'2D:W´H!6#w#w#+++++9:WVK &/:WK͞'!ͳ%!͘&!".WK!d"*W,|K͵'JKKJK*.W#".W**W+"*W|I:.EI*.W͸66>' ͔7!- +J!"'W!"2W*'W~5 J#̓7##"'W ~NʿI#F#̓7*2Wy}I6,#: W,ʇIw# 9xU7+~ ›II#: W,ʬIw#"2W J+~ ¸I+­I#"2W J#F#̓7*2WyI6,#: W,I 9xU7"2W J~# IJII"2W J60#"2W OI*2W6 #6 #r7DM:D&JK:WFJ*DM:D}'&/͞'JK:WgJ*6 #6 :D*DM&JK!"2W",W*,W~ 3K ~NJ#F#̓7*2WyʙJ6,#: W,ʣJw# 9xU7+~ ·J¬J#: W,Jw#"2W%K+~ J+J#"2W%K#F#̓7*2WyJ6,#: W,K 9xU7"2W%K~# KKKK"2W%K60#"2W*,W",W uJ*2W6 #6 #r7DM:D&ͥ+KHK!VA9 &/""W!".W*"W~ K>  ~K> #‰K#~#~U###~U*"W""W&/*.W#".WwK:.EK*.W͸66>' <:D}'':WK:WL:WL .*.W!6#~7&/̓%2D͞'U>($L>H <͞'>2 EÙ)&!"'W>A2V21W20W2W24W!4W",W:&&U:@MgVK8L:0W<20WҩM*'WU>2W"'W#͍7xʤM!V4*! y7͒7*'W6)#~76#6/#~765"'W*,W60#~765",W9@M,VL:VL*:>21W!4W",W:@Mk*L**,W~ʟM#̓7",Wbk ͒7:O+9~7(M_# M*::,VL:L:WʟM!͘&nM͵'eMnMeM!- ͥ+nMPM:.E~M!4W͸6- >A2V:1WU!4W~5U#̓7*ÍM>J$L>K$L>L$L: E2\2W:vNZVK8M*::U_@2\::¸M:øM)VK8U*::U!V>  ͔7V9nN nN.=N*-Na$N_: N6?#.N:.nN:VnN nN*cNaZN_:EN6?#dN:>2WøM͸6:W›N!.V6!V] 9ͰN͸6U!V] 9ͰN͸6U!hW"fW6 \ON!UV6*fW:WN 9 "fW6 ON!hW"fW͸6*fW~ :W¶O]9"fW2h!]t,7t,72|\O\Oog676>/ͅ66>/ͅ66͸6:_N\N> <͸6:_N\N!jV6͸6Nt,>.ͅ6t,"fWO77N͸6NO\O7(ͅ6 ~ͅ6>)ͅ67~NfP#~2W\P<2!W2WwP#~2W###~2W>2!W! W- :!W*%WU7#"%W~ P͸6>` <7:$W6!U6*%W6!V6U2W2W:P$VK8P*:>'>2W>R,P>XUUK8U*:>2WP:WU:WQd)4W,چQ! ~7QEQ#Ny<2)WMQ#F###N>2)WMQ>2)W!4Wk*[Q**"W:)WOhW,*W ̓7:)WO!hW9Q̓%͞'U2W2W2W:RgVK8Q*:>'ڤR>R,ڤRy'2D""W>2WÙQUK8UQ)VK8QQ".W>2WR*::U VK8UQ",W>2W: RRÙQ:WʟR*"W~R:W?R*.WIUR*"W:WSR*,WIUR&/! F#N#̓7xsRxR zRzR&/*"W""W~ &R'̓%2D͞'U>HU>(U2W9)VK8R>2W9 VK8U*::U",W""W*"W~S*,W:WRIUSRIUS**"W""W~ RU&2W&&U:VSgVK8U*::U*".W>2W:VS HSS͋,|}S!͘&}S͵'tS}Sͥ+}SjS:.EʎS>" <`i6:WU`iͭ4*.W ̓7z5U>g <͞'y'&>r <͋,6>w <+++++6>/ͅ66>/ͅ66.S>p q <>f <~ ZT ͸6y67 t,7 ~ͅ67#~67###F~7xOT67T͸6>` <777)6U:>'>R,T2D:D%TT}2 WTT"WT}*Ww#"W! W5­TÇT̓%2D͞'U>XU!GT_0T O))))  T͞'>2 EU <>2 E>!Gr<&od6U 6U6U/}o|g9U zpU pU*rU?kU7gU_rU#KU~TTT@@Ȅ@@@PR@brpb@@@@@@@d\,ADDITIVEALLDELIMITED VARIABLES USED BYTES USEDEXCEPTEXTENDEDFIELDSFROMLIKEDATABASE FILES # RCDS LAST UPDATENoneONSTRUCTURETOFILE UNAVAILABLEWITHFIELD:NAMEC FIELD:TYPEC FIELD:LENN FIELD:DECN A::::::::ASDF ????????DBF$$$ SUB')#6.+5:TYPEC FIELD:LENN FIELD:DECN A::::::::ASDF ????????DBF$$$ SUB#ŒWE7ڑWw#eW6 #eW!ݠ"IY>V <>2 EKX"?Yͳ!Y66!"[Y*?Y N! :T_ r7Wy2uY*[YO:U!4Y > ͔7*?Y4Y~ GûG H:I2I2I:ʈGIK8^G*::"IIyeBG>)I9~KG+"I#~O#F>2IGIK8I#*::>'ҀG>( <,I>2IG:I>T)I:I>H)I>R,y'#*I*Iy''͞'͹H1I$1I$"I*I~G2I#:.EG͸6!I6:I&#p͹H*I#"IG##z!1Ì)!"I"I͋,!d"I!͏,*In,͘,|H*I#"I%H*In,5/*I*I#"I:.E%H*I+"I|%H͸6*I+6>: 9 <*I+"I͏,:.EʰH*I6>: <$1IûG!'Iz!!"I!d"Iͷ*I#"I*I+"I|I:.EI*I͸66>x x <͞'>2 E1I <>2 E>!Gr2eS2hS>92dS>P2oS<2kS2lS&:ʟG&&O:ʟGDPK8eG*:>'>2`S:GUPK8‹G*::OOPK8O*:>2lS:GIPK8O*:>2\S:G:`S¾G>? <5:9ʹOʹO>'>2[S>R,G>R,2[Sy'2$E2vS:[SG>h E 2vS:[S’H>F ʶHûH:>ûH:>@2cSͺ7ʆH2VO͜O!VyU762#q#:cSw#:hSG:oSw#p#652_S:[SH>= 2_S͜O2S:[S I>N 2S!9P*"iS2sS͜O:SXJ:[SXI>D 2rS͜O:rSXJ:[S€I>C 4 <{I͜O:[SªI>P 2yS͜O2zS:[SI>k 2zS͜O:[SI>i >7J.[9< J>(J-J:>-J:>@2cSͺ7IO2-[͜O!.[yU762#q#:cSw#q#:hSw#65:[SdJ>< 2xS:[SœJ͸6:xS67dO:L͙8{2wS*:~,O:*]SO:O:ySJ62#N#FxJw#:wSw#:hSw#65"]SJ"]S#͍7͜O:[S K>@ <*aS6+#"aSdO K1K*aS> 2cS>^K*aS#9OKTK:>TK:>@2cSͺ7JO͜O*aSqyU7#62#q#:cSw#:wSw#:hSw#65"aSxʸL:SʸL:[SK>N c <*fS#"fS67!c6ͨO:DM6>/ͅ6:E6>/ͅ6:E6͸6ͨO:vSM!V- ͸6ͨO!W- ͨO:rS+NͨO>*ͅ67!,[- !?U- rN:ZS™M;O:dSڙM͵'rNN:yS̨O!\- :hN>2O:_SrNͨOͥ+NNrN͵'rNN:rS+N! U- +N/O:ZS+N;O:dSڙM͸6ͨO>*ͅ67!,[- !?U- +N/O:S O:LT5 OͨO>` <ͨO!LT- !9Pk*N*!9P5~AN6A͸6:kS<ùO:[S%O>4 <ÉJ>V <>O:rS:qU5MOͨO>I <ͨO!qU- !S- :zS`O>2ZS͸6:[SƒO5:9:$E}'̓%͞'ùO:$Ef:9w:ŒO.:9:[S:$Eͭ:͸6:eSOy7 ïO>!Gr<>2 E:$E}'̓%͞'ùOTTT@@Ȅ@@@PR@brpb@@@@@@@d\,A::::::::AFORMPLAINPRINTTOZP=2 7*#7~#['{ (t['t t[ )t :[7"(>[~Œw#[~({ /t[/t ͨ [~$w#[27!"7[27:7[ ©(ͨ ͸[¯(~w[tã(w͌[8~w#w[" 7(x[27* 7"7̈́[":8ä\(x†* 7\Œ~@ \#*7s#r\D:+9*:\!64~=)!\W)!7~W)!$\8~# y)*\y) y)0\!8p"7ͩ6\G"K9z ڵ)<\w#~@*~B\^#VͩÎH\ ͩ *N\c*#7"T\!"7"7Z\!8>ͥ5`\+!8>ͥf\+*6|)*l\9<282r\!*/+!*/x\d*>,D:~\JC:9<\28!*/+\r*̓\*8|ʊ*\*ͩ\ʡ*>D7D\No Fatal\r(s) Warni\:7Gͩ\!28!*/+\r*̓\*8|ʎS>" <`i6:WU`iͭ4*.W ̓7z5U>g <͞'y'&>r <͋,6>w <+++++6>/ͅ66>/ͅ66.S>p q <>f:PK8GnPK84P*:TJ>u <8,P,P̀)!S > ͔7!5S w @G9!"Q!Q"Q!"Q*Q~ ʪG*Q y7 ~ʁG#{G~P###~P*Q"Q*Q"QdG!Q"Qͳ!"Q vP!Qz*Q"Q!"P*PDM*Q"Q!Qz*Q"Q~ H*P$"P:U=G:PG>x2PGjH,PH:P_:P!S8H=3H"P!$Vr7|YHDM ͔7+6ðGx I2PxʥH*Q"QQZ7ښH!Q"Q2PðG:P2PðG*Q"QRZ7һH I:P2PðG:P_:P!SH=H"P!$Vr7|HDM*P!9!$V> ͔7+6ðG!͒7!"P!"Q!Q"Q*Q~ J y7*::I*Q9O+~ ,J9~ iI7bI_ #TIy,J ,J*:! :_CʝINʝIL4J>I::͙8DJ{DJzDJ{*::I͙8    y _ <5:,P>'M>AR,҇J!P6>2PÍJy'2PPO>R,y'2Q:E2P2E:T=2 Q:T@J:U=2Q: Q=2 Q!(Q: Qw#~7!,Q6 #6 #"P"P"P"P#"P2Q*P!cr7DM*P>͔7Oͳ!"Q!"Q*P"P*PMkKO~ :K#~ :K#y"P&o6!: QU76!Qz:Q bK:U==!Kͼ!Q"Q*PM"P:QGP!Qz>GL®K!P68 M KKONjN*P*Pr7DM*P+T]*9#"P*P6 #6 vO K*P##*Pr7DM*P*P##9 "P*P~ K6 #6 #6#"P Kx2MxʒLONjN*P*PZ7kKM"P!Q5:Q LL5~kK2Q*P"P*P*PZ7҉LM"P:Q<2QG:Q ҃Lx2Qx [L*P"P KxLONjN*PM~´L6 #6 #6++##"P~L6 #6 #6#"PvO!Q4:Q L4:U===kK2Q*P"P KjN:Q > M>2Q*PM~%M##~%M"P:Q=2QM*P"P2Q KjN:PHM*P"PO5M*P*Pr7DM:Q}'&/'̓%:PM}'̓%PO@'QO-PO-PO-QO-ùM:PM}'̓%:Q}'̓%@'͞':P2Eͳ,P+~ M++~ M#~ #ͥ' >.ͭ7#"QQ9: QO> !͔76: QN~FN"Q*P+Z7O*Q~IN IN ?N> # N7y!"Q:QG!Qz*P~ ʁNʁN#qN: QO !U7 ʛN+~ʌN ʌNy2Q2QN*P*Pr7" QNy*PU7* QDM*P9:Q_*P"PN*P+U7* QDM*P+*9#"P*P:QO9vO*Q9:P^O*PaZ7-ÒOOT] "P:P}',xZO AO"P>2 Q*P+6 #6 #6#"P>2 Q*PbZ7*P*Pr7Z7O*P:Q}'&/*PT] *Pr7DM9*P"P*P"P*P"P*Q"Q*P> ͭ7#"P!P68ʠM5M>e <);êG&odP PP/}o|gP z>!Gr<>2 E,PCOMMANDNAME TYP LEN DECABORTING MODIFY (Y/N) NEW FILEBUFFER FULL, TYPE Y TO SAVE, OR N TO ABORTSTRUCTURE$$$BAK"7F#>27:7Þ ©(ͨ ͸(#~d¯FIELD 01 CSFIELD 02 C6SFIELD 03 COSFIELD 04 ChSFIELD 05 CSFIELD 06 CSFIELD 07 CSFIELD 08 CSFIELD 09 CSFIELD 10 CSFIELD 11 CTFIELD 12 C0TFIELD 13 CITFIELD 14 CbTFIELD 15 C{TFIELD 16 CTFIELD 17 CTFIELD 18 CTFIELD 19 CTFIELD 20 CTFIELD 21 CUFIELD 22 C*UFIELD 23 CCUFIELD 24 C\UFIELD 25 CuUFIELD 26 CUFIELD 27 CUFIELD 28 CUFIELD 29 CUFIELD 30 CUFIELD 31 C VFIELD 32 C$V >ELD 25 CuUFIELD 26 CUFIELD 27 CUFIELD 28 CUFIELD 29 CUFIELD 30 CUFIELʎS>" <`i6:WU`iͭ4*.W ̓7z5U>g <͞'y'&>r <͋,6>w <+++++6>/ͅ66>/ͅ66.S>p q <>f̀)> 2KL2L> 2LL!"HL2EL:ʙG*LK8GG*::O+ʃK(‹K"HL*:G-LK8UG\G*:G7LK8jG~G*:> 2KL2L>2LLGBLK8“K*:'ڛK>2ELG*HL|ʫK:ELʓK*+r7)|GG xGG>2SL*HL ~L{K2oL2L2LCH:KL2KL2L:LL2LL#~2pL2L2L#̓7~2sL2L2Lr7"XL:pLG:sLO:oLN9HxAO!L*"L"L9-,'y'2ZL>R,y'2Da/!"PL>2cL2TL͋,|¿H'2ZLÍJ2TL:D}'','*PL͏,a/.R,y'2ZL>2cL:SL_*PLr7"PL|ʍJ:cLʍJ2cL:TLH*PL&:SLor7H{2SL2RL2UL)DM!"VL:D}'+-:ZL}','+-:TL,I,ڋI I*PL#"PL2I,sK*XL*VL~7"VL`i!RL4:SLIJ*"L!tL"_L*HL"\L:TL—I:SL_*PLr7|sKRJ"PL"NL×I:RL2SLJRJ:ZL}':TLʺI͘,RJʤI*PL#"PLI͘,sK:LL2aL![L- I:D}'5/*HL y7HK?J:D}'*XL*r7)DM&/*LHK9*!:SL=O9y!U7~7:SLOJ*"L*HL"\L:TL—I*NL+"NL|—I:D}')DM!"VL:SL*VL̓7"VL*XLr7&/=fJ:TL€H,'ÿH:D}'̓%:ZL}'̓%͞'.*L*:.EʳK!J6óKSORT COMPLETE:SLOJ J:KL2aL:SLGyH==CK!tL"_L!dL"\L!蜁U7̓7y7"L"qL![L- /K*L~7*qL~7:K:UL:KCKCK=Jx:cL"L:ULfK!L- fK>2cL!L- >2UL> / <ãK> <ãK>R <ãK>H <ãK>( <ãK>2 EóK>2 EóK>!Gr2I͸6!K6y'&.+G>p <0G>q <͸6$~wG"`K!'K6͸67*`K~wG#"`K}'&7 .nK,! L6͸6GG͞'.y'G>2I͸6!IK6y'&.ʨG>p <íG>q <͸6$~G"`K!'K6͸67*`K~G#"`K}'&7 .nK,! L6͸6G.͸6:IH͸6͸6͸6>e <);lI͸6!I6:D6>/ͅ6:E6>/ͅ6:E6!J6: E@ͅ6>:ͅ6:DeH!I6:D&͸6!(J6:E[I7!5J6:E[I!BJ6:E[I7!OJ6:E[I!iJ6: E[I7!\J6;[I!vJ6: E[I7!J6: E[I!J6:E[I7!J6:+E[I!J6:!E[I7!J6:"E[I!J6:&E[I7!J6:)E[I!J6<[I7!J6:*E[I!J6:,E[I7!K6:.E[IlIeI!IhI!I6͞'>!Gr'>R,2D:H2 E:U2HG:Df:G9*DG#HK8DG>2H͸6G:Df:G9~*kGðGG:Df:G9yHK8G9tHK8DG~*ʽG.:6:H=2HƒG͸6>e <);G͸6:U2HÃG::!E:HG!H6:D}'̓%͞'G>!Gr<ʡ<ʡʡ Ę>GG<"8z½  "7"8y28  28DBASEMSG*END*EXITNO HELP MESSAGES FOUNDHELP Ę>GG<"8z½  "7"8y28  28DBASEMSG*END*EXITǸ).̀).2ZJ2YJ2XJ:ʤG:ZJBGUJK8BG*::'ڠI>2ZJG:YJiGQJK8iG*::I>2YJG:XJIJJK8I*:>2XJ:I"[J:O+I*::,G:ÊG:ZJʨI:YJʰI>R,y'2D͞'.:XJ‡H"]J!"_J!eJ"aJ*]J~ H*_J9*aJ6-#*]J~7*_J~765"aJ*]J "]J*_J "_JG>."]J*]J~ H N'zH*_J*]J9*aJ6-#*]J~7*_J~765"aJ*_J "_JZ7H*]J "]J+H!"_J!eJ"aJ*[J*::O+"cJ9(I"]J*_J9*aJ6-#*]J~7*_J~765"aJ*_J"_J*cJ*::,H:ÙH*_J6 !ͳ%> 2:D}' &/͞'>.9-.9-!"ᜯ.!- aI!eJ- :D}'*DM&/͞'*#"|<ʸI>.ͥ+oI,I9-.ͥ+I,I:D}'' .> &/̓%͞'I>( H l m  2 EI͞'>2 EI>!Gr!Gr2JG:JyGJK8yG>2J*:"J:O+?J*::,G:_G:JsJJK8sJ>2J*::GJ"KO+GJ2K9(GJ"K*:G:JOJ>R,Gy'2D ,G>R,y'2D 9&/͞'!ͳ%!"K65:JxH*J*::O+"J9(WJ! ~NdH*K6)#~7"K9N'WJ*K6)#~76#61#~765"K*J*::,H:H!" K* K~ H ~N½H* K(WJ*K6)#~7* K6)#~76#61#~765"K* K" K~H:JI*K#"K"J*K! ~NH*K6)#~7"K:KO*KN'GJ*K6)#~7p#65"K*K#"K"K!" K* K~ `I(SI*K6)#~761#* K~765"K* K" K*I!͘&*DM!> ͔79-~*ʅI͵'‘Iͥ+IvII*K- !"JI:JʱI*J- ʺI!- I:D}'*DM&/͞'*J#"J*K- ͥ+II͵'IàI*J":D}'*DM&/:D}'' . &/̓%͞':.E~J*J͸66>' <~J>( <_J>R <_J> <_J>H <_J>R <_J:D}'̓%͞'>2 E~J͞'>2 E~J>!Gr̀)2K2K2K2K2K:+H:K>GKK8>G*::'J>2KG:KkGKK8kG*::"KO+J2K*:>2KG:K¦GKK8¦G*::$K"K:O+J*:>2K:,G:ÇG:K HKK8 H*::$K"K:O+J*:>2K:,G:G:KK8G*::O+J*::,G:G:K$KKK8$K*:>2K$KG:KJ:KJ>R,Jy'2D ,!ͳ%:KœH*K(J F#y7"K*K:KON'J N#y7"KxJ2KûH*K:KON'J ~2K#y7"K!"K"K:KBI*K"K*K*::"K(J"K*KO+"K*KN'J*K6)#~76)#*K~76#61#*K~7"K*K*::~,9I:"KH*K65#"K:KI*K"K*K*::"K(J"K*KO+"K*::KK8‹I*::"KO+"K*KN'J!K ~*KNʱI6-#~7úI6)#~761#*K~7"K*K*::~,I:"KOI*K65:KcJ͞'!͘&J:D}'*DM,*K*K:KO7WJJ@J:K*J*K- :K7J*K- ͞'5/:D}'*DM,JJ͞'ͥ+JJ:D}'*DM,͞'*K:K '|ʪJ:KʗJ*K- :KʤJ*K- 5/:D}'*DM,JtJ:D}'̓%͞'5K>( <K> <$K>n <K>T <K>R <$K>o <K>s <K>S <K:D}'̓%͞'>2 E5K:D}'̓%>2 E5K>!Gr2M:O+:G> R 2M*M~ G͡JG!M4*M"MG:UO:MG:M2M#H*M:Mg."M!M4$H&"#H'öG͘,ҶG!"MK"M2M*M~ SHbKSH!M4*M"M3H: MO:MG!y=jHOxg^H"M* MM LL!Lz* M' K"M2M*M~ ʵHKڵH!M4*M"MÕH:M!MH~=2M:MG>2Mx2Mͼ2MK"M2M*M~ I͡JI!M4*M"MH:MILL2 M:MBI5/$BIͺ!2 MBI," M"M 2 M:MUJ:MI!M6#:M/2 M:M2MàG9-," M* M"M2 MÜG!M6#:Mw$J&"HJ" M: MHJ:MG:MO:M2MHJmH$%J&"HJ'+J͘,HJ* M#" M:MG:MO:M2MHJmH* M"M2 MÜG:M0ʞJsJ:M=J2M!M4ÑJK~ ʑJ:M<2M:M=J2M* M"M2 MÜGLL:TO ~ҶJ:MJ:MʿJ7~/2M7BK?~2M*MDML!Lz*M:M-!!M͔7!!MyU767~2MñK?~2MO>-!!M͔7!M~K#øK!!M:MU76*MDM!M!Lz*M:M2 ELL>OLͳ: M2E>!Gr<6 s#r27*7###:6$:7$*7 ͩ273{ "*$'¦$G *#7++J$ FIELDSRECORD # :00000 ͩ273{ "*$'¦$G *#7++J$ FIELDSRECORD -PO-PO-QO-ùM:PM}'̓%:Q}'̓%@'͞':P2Eͳ,P+~ M++~ M#~ #ͥ' >.ͭ7#"QQ9: QO> !GGH̓%#.̓%#>, <:D}''̓%:ʑH9IK8¡H*::87¡H~7:ʡHOG::pG,¡H::DG"I*I~ʥG#ÚG6#">IzG*>I6!ͽGʑH |G02III~G #Gy2I#~GI |DHO 6 .̓%́'#. .̓%́'#.:D}''̓%:#E}'̓%2#Ed)2c2D2E.ìH:d='$Z='͞'>2 EìH>!Gr<  { !![!!" :"E"Q"^"d"m""" """"""{!zW{_{!zW{_{!zW{TO$$$ SUB { !![!!" :"E"Q"^"d"m""" """"""{!zImH* M+" M|I:MG:M2MImH* MZ7I"M>2 M:M2MàG9-," M* M"M2 MÜG!M6#:Mw$J&"HJ" M: MHJ:MDEPTNONlDEPTNAMECl 1TECHNICAL DEVELOPMENT 2OFFICE ADMINISTRATION 3TRANSPORTATION 25.50 0.00 0.00 4 2 956.35 0.00 0.00 5 2 2400.55 0.00 0.00 6 3 742.45 0.00 0.00 7 3 450.75 0.00 0.00BBBBBBB5BBBBBBBBBBBBBBBBBBBBBBBM=1,L=55,W=35 Y DEPARTMENT LISTING N N 4,DEPTNO DEPT NO 25,DEPTNAME DEPARTMENT NAME !EMPNONlDEPTNONlTAXCODENlGROSSSALNlTAXESNlNETSALNl 1 1 4 1875.52 0.00 0.00 2 1 3 1555.97 0.00 0.00 3 1 3 1125.50 0.00 0.00 4 2 2 956.35 0.00 0.00 5 2 2 950.78 0.00 0.00 6 3 2 742.45 0.00 0.00 7 3 1 450.75 0.00 0.0000 7 3 450.75 0.00 0.00BBBBBBBBBBB BBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB(EMPNONlLASTNAMEClDEPTNONlJOBCLASSNlTAXCLASSNlGROSSSALN l 5EINSTEIN 2 22 75 1500.05 2REDFORD 7 9 4 2000.50 8ROCKNE 1 65 34 1100.50 54GORT 99 99 39 500.00 78SMITH 903 49 61 1200.75 70JONES 235436456 3000.85 22SMITH 903876321 4576.82ber to indicate" ?"the type of work this employee does), and" ?"TAXCLASS and GROSSSAL for tax deduction and gross" ?"salary information. As we shall see in the" ?"advanced DBASE TUTOR lessons, the key fields" ?"in fi R(EMPNONlLASTNAMEClDEPTNONlJOBCLASSNlTAXCLASSNlGROSSSALN l 5EINSTEIN 2 22 75 1500.05 78SMITH 903 49 61 1200.75* 22SMITH 903876321 4576.82 54GORT 99 99 39 500.00 78SMITH 903 49 61 1200.75* 70JONES 235436456 3000.85 22SMITH 903876321 4576.82' TO CHECK DO CHECKC ?"? LASTNAME" STORE '? LASTNAME' TO CHECK DO CHECKC ?"There's another SMITH. Is it flagged for deletion?" ?"? *" STORE '? *' TO CHECK DO CHECKC ?"Yes, it is flagged for deletion, so we don't"(EMPNONpLASTNAMECpDEPTNONpJOBCLASSNpTAXCLASSNpGROSSSALN p 5EINSTEIN 2 22 75 1500.05 2REDFORD 7 9 4 2000.50 8ROCKNE 1 65 34 1100.50 54GORT 99 99 39 500.00 78SMITH 903 49 61 1200.75 70JONES 235436456 3000.85 22SMITH 903876321 4576.82 LESSON IF LESSON = 'QUIT' QUIT ENDIF IF LESSON = 'I' STORE 1 TO OK LOOP ENDIF STORE VAL(LESSON) TO LESSONN IF LESSONN < 1 .OR. LESSONN > 10 ?"I'm afraid you didn'M=1,L=55,W=40 Y EMPLOYEE MASTER PAYROLL N Y N 5,EMPNO EMP NO N 4,DEPTNO DEPT NO N 2,TAXCODE TX CD N 8,GROSSSAL GROSS SALARY Y 6,TAXES TAXES Y 8,NETSAL NET SALARY Y SE TUTOR" ?"manual, if you get involved in complex JOINS with" ?"many files, make sure that you do not violate any" ?"of the normailzation principles." ? ?"One more caution, too, when using JOIN. JOINs of" ?"larger files can take an extraordinary amount of" ?"time. If you find that run times for JOINs are" ?"becM=1,L=55,W=50 Y dBASE II PAYROLL REPORT N Y N 4,EMPNO EMP NO N 15,LASTNAME EMPLOYEE LAST NAME 4,DEPTNO DEPT NO N 5,JOBCLASS JOB CLASS N 5,TAXCLASS TAX CLASS N 10,GROSSSAL GROSS SALARY Y  ENDIF IF COMMAND # CHECK ?"You didn't enter:" ?" &CHECK" ?"Please try again." LOOP ELSE STORE 1 TO OK SET TALK ON &COMMAND SET TALK OFF ENDIF ENDDO M=1,L=55,W=50 Y PAYROLL INPUT LISTING N Y N 5,EMPNO EMP NO N 4,DEPTNO DEPT NO N 2,TAXCODE TX CD N 8,GROSSSAL GROSS SALRAY Y 6,TAXES TAXES Y 8,NETSAL NET SALARY Y ?"a report form called EMPMFRM for you to use to" ?"generate the report." STORE 'USE EMPMAST' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'REPORT FORM EMPMFRM' TO CHECK DO CHECKC WAIT ERASE ?"Now, let's issue the same three commands for the" ?"JOBHIST file using the report form JOBHFRM re ?"time. If you find that run times for JOINs are" ?"becoming excessive, you may want to accomplish" ?"the results of a JOIN by using the UPDATE command," ?"or by writing a command procedure." ? ?"It's time to QUIT." STORE 'QUIT' TO CHECK DO CHECKC RETURN  10.15 20.20 30.25 40.30FFICE ADMINISTRATIO 3TRANSPORTATION 0 3 1 1125.50 0.00 0.00 4 2 956.35 0.00 0.00 5 2 2400.55 0.00 0.00 (EMPNONpLASTNAMECpDEPTNONpJOBCLASSNpTAXCLASSNpGROSSSALN p 2REDFORD 7 9 4 3500.50 5EINSTEIN 2 22 75 1500.05 8ROCKNE 1 65 34 1100.50 22SMITH 903876321 4576.82 54ZOG 99 99 39 525.25 70JONES 235436456 2965.85 78SMITH 903 49 61 1200.75 &CHECK" ?"Please try again." LOOP ELSE STORE 1 TO OK SET TALK ON &COMMAND SET TALK OFF LOOP ENDIF ENDIF IF$EMPNONlEMPNAMECl 1JONES, SARAH P. 2SMART, JOHN H. 3SCHNERD, H. 4FINGERS, STEPHEN 5DUCK, D. 6TROUT, KILGORE 7SMITH, R. 75 0.00 0.00BBBBBBBBBBB BBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBM=1,L=55,W=40 Y EMPLOYEE NAME LISTING N N 5,EMPNO EMP NO 30,EMPNAME EMPLOYEE NAME  03/30/81 1 1 4 1875.52 0.00 0.00 2SCIENTIST 01/25/68 2 1 3 1555.97 0.00 0.00 3ENGINEER 06/20/79 3 1 3 1125.50 0.00 0.00 4CLERK TYPIST 08/14/81 4 2 2 956.35 0.00 0.00 5COPY SPECIALIST 11/28/80 5 2 2 950.78 0.00 0.00 6DRIVER 09/21/76 6 3 2 742.45 0.00 0.00 7OFFICE ASSISTANT 05/21/82 7  2EMPNO@  @  ?   " @@ @P@A"ATApAx?   " @ @ @` EMPNONlLASTNAMEClGROSSSALN l 54ZOG 25.25 2 1500.00 70JONES -35.00 1 65 34 1100.50 22 0 0 0 9576.82 54GORT 99 99 39 500.00 70JONES 235436456 3000.85 78SMITH 903 49 61 1200.75r of system design, and each system will" ?"dictate which method should be used. The purpose" ?"of this lesson is to show you how to use SORT" ?"if you feel the circumstances warrant it." WAIT ERASE ?"Enough said. EMPNONpLASTNAMECpGROSSSALN p 54ZOG 25.25 2 1500.00 70JONES -35.00?"Now, tell me which disk drive contains lesson &LESSON, and press the" ?" key." STORE 0 TO OK1 DO WHILE OK1 = 0 ACCEPT 'WHICH DISK DRIVE CONTAINS LESSON &LESSON?' TO TDRIVE IF !(TDRIVE) = 'QUIT' QUIT ENDIF RESET STORE $(!(TDRIVE),1,1) TO TDRIVE IF TDRIVE >= 'A' .AND. TDRIVE <= 'P' IF FILE("&TDRIVE.:TEACH&LESSON..CMD") STORE 1 TO EMPNONpLASTNAMECpGROSSSALN p 2 1500.00 54ZOG 25.25 70JONES -35.00 order by EMPNO." ? ?"Type SORT ON EMPNO TO EMPTSRT " STORE 'SORT ON EMPNO TO EMPTSRT' TO CHECK DO CHECKC ?"Now, use EMPTSRT, and display all the records on it. I'll help you if" ?"you make errors in either of the two commands to do this." STORE 'USE EMPTSRT' TO CHECK DO CHECKC STORE 'DISPLAY ALL' TO CHECK DO CHECKC M=1,L=55,W=50 Y JOB HISTORY REPORT N N 5,EMPNO EMP NO 15,EMPNAME EMPLOYEE NAME 15,JOBTITLE JOB TITLE 8,STRTDATE START DATE 06/20/79 4CLERK TYPIST 08/14/81 5COPY SPECIALIST 11/28/80 6DRIVER 09/21/76 7OFFICE ASSISTANT 05/21/82BB5BBBBBBBBBBBBBBBBBBBBBBBM=1,L=55,W=40 Y JOB HISTORY FILE LISTING N N 5,EMPNO EMP NO 20,JOBTITLE JOB TITLE 8,STRTDATE START DATE results of a JOIN by using the UPDATE command," ?"or by writing a command procedure." ? ?"It's time to QUIT." STORE 'QUIT' TO CHECK DO CHECKC RETURN  10.15 20.20 30.25 40.30FFICE ADMINISTRATIO 3TRANSPORTATION 0 3 1 1125.50 0.00 0.00 4 2 956.35 0.00 0.00 5 2 2400.55 0.00 0.00 "EMPNONlJOBTITLEClSTRTDATECl 1SUPERVISOR 05/10/79 1MANAGER 03/30/81 2SCIENTIST 01/25/68 3ENGINEER 06/20/79 4CLERK TYPIST 08/14/81 5COPY SPECIALIST 11/28/80 6DRIVER 09/21/76 7OFFICE ASSISTANT 05/21/82BB5BBBBBBBBBBBBBBBBBBBBBBBEEMPNONțJOBTITLEC͛STRTDATECEMPNONEMPNAMEC 1SUPERVISOR 05/10/79 1JONES, SARAH P. 1MANAGER 03/30/81 1JONES, SARAH P. 2SCIENTIST 01/25/68 2SMART, JOHN H. 3ENGINEER 06/20/79 3SCHNERD, H. 4CLERK TYPIST 08/14/81 4FINGERS, STEPHEN 5COPY SPECIALIST 11/28/80 5DUCK, D. 6DRIVER 09/21/76 6TROUT, KILGORE 7OFFICE ASSISTANT 05/21/82 7SMITH, R. CHECK" ?"If you would like to try to correct the statement, enter Y when" ?"prompted. Otherwise, enter N, and then re-enter the entire command." DO TEACHC ENDIF IF COMMAND # CHECK ?"Please enter:" ?" &CHECK " LOOP ELSE STORE 1 TO OK SET TALK ON &COMMAND SET TALK OFF ENDIF ENDDO STORE ' ' TO PROMPT 'EMPNONțDEPTNON͛TAXCODENЛGROSSSALNқTAXESNڛNETSALNTAXCODENTAXPCTN 1 1 4 1875.52 0.00 0.00 40.30 2 1 3 1555.97 0.00 0.00 30.25 3 1 3 1125.50 0.00 0.00 30.25 4 2 2 956.35 0.00 0.00 20.20 5 2 2 950.78 0.00 0.00 20.20 6 3 2 742.45 0.00 0.00 20.20 7 3 1 450.75 0.00 0.00 10.15 JEMPNONțDEPTNON͛TAXCODENЛGROSSSALNқTAXESNڛNETSALNTAXCODENTAXPCTNEMPNONEMPNAMEC 1 1 4 1875.52 0.00 0.00 40.30 1JONES, SARAH P. 2 1 3 1555.97 0.00 0.00 30.25 2SMART, JOHN H. 3 1 3 1125.50 0.00 0.00 30.25 3SCHNERD, H. 4 2 2 956.35 0.00 0.00 20.20 4FINGERS, STEPHEN 5 2 2 950.78 0.00 0.00 20.20 5DUCK, D. 6 3 2 742.45 0.00 0.00 20.20 6TROUT, KILGORE 7 3 1 450.75 0.00 0.00 10.15 7SMITH, R.  fEMPNONpDEPTNONpTAXCODENpGROSSSALNpTAXESNpNETSALNpTAXCODENpTAXPCTNpEMPNONpEMPNAMECpDEPTNONqDEPTNAMECq 1 1 4 1875.52562.65 1312.87 40.30 1JONES, SARAH P. 1TECHNICAL DEVELOPMENT 2 1 3 1555.97388.99 1166.98 30.25 2SMART, JOHN H. 1TECHNICAL DEVELOPMENT 3 1 3 1125.50281.37 844.13 30.25 3SCHNERD, H. 1TECHNICAL DEVELOPMENT 4 2 2 956.35191.27 765.08 20.20 4FINGERS, STEPHEN 2OFFICE ADMINISTRATION 5 2 2 950.78190.15 760.63 20.20 5DUCK, D. 2OFFICE ADMINISTRATION 6 3 2 742.45148.49 593.96 20.20 6TROUT, KILGORE 3TRANSPORTATION 7 3 1 450.75 67.61 383.14 10.15 7SMITH, R. 3TRANSPORTATION  too, and you can" ?"compute tax and net salary amounts, and produce the payroll register." WAIT ERASE ?"Issue the commands to do all this. First, USE JOINPAY3." STORE 'USE JOINPAY3' TO CHECK DO CHECKC CLEAR SET TALK OFF SET CONFIRM ON SET EXACT ON STORE ' ' TO PROMPT ERASE @ 6,0 ?" dBASE II LESSONS RELEASE 2.0.1" ?" COPYRIGHT 1982, 1983 S. C. JENNER" ?" ALL RIGHTS RESERVED" STORE 0 TO COUNT DO WHILE COUNT < 100 STORE COUNT + 1 TO COUNT ENDDO ERASE ?"I'd like to know your name. Please enter your first name and press" ?"the key." STORE 0 TO OK DO WHILE OK = 0 ACCEPT "What's your first name?" to STUDENT IF LEN(STUDENT) > 10 ?"You have a long first name. Please enter up to 10 characters of" ?"your first name or a nickname." LOOP ENDIF IF STUDENT = ' ' ?"I'm afraid you didn't enter your name. Please try again." LOOP ENDIF STORE !(STUDENT) TO STUDENT IF STUDENT = 'QUIT' QUIT ENDIF ACCEPT "Did you spell it correctly (Y OR N)?" TO SPELL STORE !(SPELL) TO SPELL IF SPELL = 'QUIT' QUIT ENDIF IF SPELL = 'Y' STORE 1 TO OK ENDIF ENDDO ERASE ?"If you have a printer, &STUDENT, turn it on. It will keep track of" ?"all that you do during these training sessions." ? ?"If your printer is on, type Y and press the key. If it is not" ?"on, type N, and press the key." STORE 0 TO OK DO WHILE OK = 0 ACCEPT "Is your printer on (Y/N)?" TO PRINTER IF !(PRINTER) = 'QUIT' QUIT ENDIF IF !(PRINTER) = 'Y' .OR. !(PRINTER) = 'N' STORE 1 TO OK IF !(PRINTER) = 'Y' SET PRINT ON ENDIF ELSE ?"You didn't enter a Y or N. Please try again &STUDENT.." LOOP ENDIF ENDDO ERASE DO WHILE T STORE 0 TO OK DO WHILE OK = 0 ?"If this is the first time you've used dBASE II LESSONS, select the" ?"I option from the menu below. This introduction contains background" ?"material on computers, operating systems, and dBASE II." ? ?"If this is not the first time you've used dBASE II LESSONS, select" ?"the appropriate lesson number (or QUIT) from the menu below." ? ?" I - Introduction, definitions of basic computer terms (reference," ?" not interactive)" ?" 1 - Create files, generate Reports, and correct syntax errors" ?" 2 - Add, change, and delete data in files, and record positioning" ?" 3 - Selecting sub-sets of data on files, and computations" ?" 4 - Record keys, indexing, random processing, and Boolean operators" ?" 5 - File and system utilities, and intro to command procedures" ?" 6 - Sorting, updating, and use of memory" ?" 7 - Relational data base construction" ?" 8 - Other forms of accepting and displaying data, dBASE II functions," ?" and SET options" ?" 9 - Building custom reports and screens" ?" 10 - Command procedures (programming features in dBASE II)" ?" QUIT - In response to any prompt, to return to the operating system" ? ACCEPT 'ENTER THE LESSON NUMBER' TO LESSON STORE !(LESSON) TO LESSON IF LESSON = 'QUIT' QUIT ENDIF IF LESSON = 'I' STORE 1 TO OK LOOP ENDIF STORE VAL(LESSON) TO LESSONN IF LESSONN < 1 .OR. LESSONN > 10 ?"I'm afraid you didn't enter an I, or a number between 1 and 10." ?"Please try again." WAIT LOOP ELSE STORE 1 TO OK ENDIF ENDDO IF LESSON # 'I' IF LESSONN > 9 STORE STR(LESSONN,2) TO LESSON ELSE STORE STR(LESSONN,1) TO LESSON ENDIF ENDIF STORE 0 TO OK DO WHILE OK = 0 IF FILE('TEACH&LESSON..CMD') STORE 1 TO OK ELSE ?"You must have received several diskettes for dBASE II LESSONS. Insert" ?"the diskette which contains lesson &LESSON into another disk drive (not" ?"the one you started dBASE II on). I'll wait while you do that." WAIT ?"Now, tell me which disk drive contains lesson &LESSON, and press the" ?" key." STORE 0 TO OK1 DO WHILE OK1 = 0 ACCEPT 'WHICH DISK DRIVE CONTAINS LESSON &LESSON?' TO TDRIVE IF !(TDRIVE) = 'QUIT' QUIT ENDIF RESET STORE $(!(TDRIVE),1,1) TO TDRIVE IF TDRIVE >= 'A' .AND. TDRIVE <= 'P' IF FILE("&TDRIVE.:TEACH&LESSON..CMD") STORE 1 TO OK1 LOOP ELSE ?"I'm afraid drive &TDRIVE doesn't contain lesson &LESSON.. Please specify" ?"the correct drive, and make sure that you inserted the diskette which" ?"contains lesson &LESSON into that drive." ENDIF ELSE ?"The drive specification must be one of the letters A through P." ENDIF ENDDO SET DEFAULT TO &TDRIVE ENDIF ENDDO IF LESSON = 'I' DO TEACHI LOOP ENDIF DO TEACH&LESSON ENDDO RETURN characters of" ?"your first name or a nickname." LOOP ENDIF IF STUDENT = ' ' ?"I'm afraid you didn't enter your name. Please try again." LOOP ENDIF STORE !(STUDENT) TO STUDENT IF STUDENT = 'QUIT' QUIT ENDIF ACCEPT "Did you spell it correctly (Y OR N)?" TO SPELL STORE !(SPELL) TO SPELL IF SPELL = 'QUIT' QUIT ENDIF IF SPELL = 'Y' STORE 1 TO OK ENDIF ENDDO ERASE ?"If you have a printer, &STUDENT, turn FIELD:NAMEC pFIELD:TYPECpFIELD:LENNpFIELD:DECNp FIELD C 80 0ADDRESS C 20 0*CITY C 10 0STATE C 30 0*PHONE C 12 0BBBBBBBJBBBBBB@BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"BBBBBBBBB"BBBBBBBBBBBBBBBBBBBBBBBBBBBNAMECpADDR1CpADDR2CpADDR3CqADDR4C1qADDR5COq JOHN MOTT 1773 N. GROVER CIRCLE YUMA TEXAS 90009 USA HER THERE YES THERE YES YES THERE @ SAY" ?"commands will be displayed on the top half of the" ?"screen." WAIT ERASE @ 12,0 SAY "Here I am down here." @ 13,0 SAY "The scLASTNAME@  @  @ @P@A"ATApAx?   " @EINSTEIN GORT JONES REDFORD ROCKNE SMITH SMITH   " @ @ @` M=1,L=55,W=50 Y PAYROLL REPORT N Y N 10,EMPNAME EMPLOYEE NAME 11,DEPTNAME DEPARTMENT NAME 8,GROSSSAL GROSS SALARY Y 7,TAXES TAXES Y 8,NETSAL NET SALARY Y  1TECHNICAL DEVELOPMENT 3 1 3 1125.50 0.00 0.00 30.25 3SCHNERD, H. 1TECHNICAL DEVELOPMENT 4 2 2 956.35 0.00 0.00 20.20 4FINGERS, STEPHEN 2OFFICE ADMINISTRATION 5 2 2 950.78 0.00 0.00 20.20 5DUCK, D. 2OFFICE ADMINISTRAT1,L=55,W=50 Y PAYROLL REPORT N Y N 10,EMPNAME EMPLOYEE NAME 10,DEPTNAME DEPARTMENT NAME 8,GROSSSAL GROSS SALARY Y 7,TAXES TAXES Y 8,NETSAL NET SALARY Y  1TECHNICAL DEVELOPMENT 3 1 3 1125.50 0.00 0.00 30.25 3SCHNERD, H. 1TECHNICAL DEVELOPMENT 4 2 2 956.35 0.00 0.00 20.20 4FINGERS, STEPHEN 2OFFICE ADMINISTRATION 5 2 2 950.78 0.00 0.00 20.20 5DUCK, D. 2OFFICE ADMINISTRAT QFIELDCPp M=1,L=55,W=70 Y NAME AND ADDRESS REPORT Y N 15,NAME NAME OF PERSON 20,ADDRESS ADDRESS 10,CITY CITY REPLACE FIELD:LEN WITH 80 REPLACE FIELD:DEC WITH 0 IF FILE("T1RDBF") DELETE FILE T1RDBF ENDIF CREATE T1RDBF FRTAXCODENlTAXPCTNl 10.15 20.20 30.25 40.30FFICE ADMINISTRATIO 3TRANSPORTATION 0 3 1 1125.50 0.00 0.00 4 2 956.35 0.00 0.00 5 2 2400.55 0.00 0.00 6 3 742.45 0.00 0.00 7 3 450.75 0.00 0.00BBBBBBB5BBBBBBBBBBBBBBBBBBBBBBBM=1,L=55,W=10 Y TAX CODES N N 4,TAXCODE TAX CODE 4,TAXPCT TAX PCT AMECD AXCODENGGROSSSALNITAXESNQNETSALNW ERASE ?"In this module, you will learn how to CREATE a dBASE II file, DISPLAY" ?"its contents and STRUCTURE, write a REPORT, correct SYNTAX ERRORS, and" ?"how to QUIT, or exit from dBASE II. It's very easy to do. To start, we" ?"will CREATE a file. All you have to do is type CREATE and press the" ?" key." ? ?"If you're not sure what a file is, what records are, or what fields" ?"within records are, QUIT this lesson, and review the dBASE II LESSONS" ?"Introduction. Otherwise, &STUDENT, proceed with your CREATE." ? ?"Type CREATE ." STORE 'CREATE' TO CHECK DO CHECKC1 ERASE ?"Very good, &STUDENT!" ? ?"dBASE II will now ask you to enter a filename for this file, so it" ?"can be found later. You may call the file any name you wish, but the" ?"filename may not exceed 8 characters. Type up to an 8 character" ?"filename, and press the key." STORE 0 TO OK DO WHILE OK = 0 ACCEPT TO FILE IF !(FILE) = 'QUIT' QUIT ENDIF STORE !(FILE) TO FILE IF LEN("&FILE") > 8 ?"I'm afraid you entered a filename which is greater than 8 characters." ?"Please try again." LOOP ENDIF IF FILE = ' ' ?"I'm afraid you didn't enter a file name. Please enter a name with from 1" ?"to 8 characters." LOOP ENDIF IF @(' ','&FILE') # 0 ?"Imbedded blanks are not permitted in the file name." ?"Please try again." LOOP ENDIF STORE FILE TO T:NAME DO TEACHXC IF T:NAMEOK # 1 LOOP ENDIF STORE 1 TO OK ENDDO STORE 0 TO OK ERASE ?"Now, you must specify the fields contained in &FILE.. Each field" ?"specification must contain a fieldname, fieldtype (either C for" ?"character fields, N for numeric fields, or L for logical fields)," ?"fieldlength, and the number of decimal positions in the field MAY be" ?"specified if it is a numeric field. Commas separate the fieldname," ?"fieldtype, fieldlength, and decimal specifications." ? ?"A enters each field. After you have entered the last field," ?"press the key again, and the file will be CREATEd." ? ?"By the way, whenever appears at the end of an entry line," ?"it means you should press the key. Don't type the word ." ? ?"Here are a couple of examples of fields. A 30 position character" ?"field called NAME would be entered as follows:" ? ?" NAME,C,30" ? ?"A 5 position numeric field called AMOUNT with 2 decimal positions would" ?"be entered as follows:" ? ?" AMOUNT,N,5,2" ? WAIT ERASE ?"OK. Try to CREATE a file. Make the file a name and address file" ?"that contains names and addresses of some of your friends (you do" ?"have some friends, right?)." ? ?"I'm going to let you specify only three fields in your file &STUDENT," ?"even though dBASE II lets you have up to 32 fields per file. We're" ?"trying to keep this first file simple." WAIT ERASE ?"I'm going to enter the first field for you, so it's easier for you to do" ?"the rest of the fields on your own. I'm going to call the first field" ?"NAME, and make it a character type field with a length of 30." STORE 1 TO FIELDNO ?"ENTER RECORD STRUCTURE AS FOLLOWS:" ? ?" FIELD NAME,TYPE,WIDTH,DECIMAL PLACES" ? DO WHILE OK = 0 STORE ' ' TO FIELDDEF DO WHILE FIELDDEF = ' ' STORE STR(FIELDNO,1) TO FIELDX STORE ' ' TO FIELDDEF IF FIELDNO = 1 ?" 1:NAME,C,30" ?"Press the key, and I'll enter it." SET CONSOLE OFF WAIT SET CONSOLE ON ?"Now, you enter the remaining fields for &FILE." STORE 'NAME,C,30' TO FIELDDEF ENDIF IF FIELDNO > 3 ?"Press the key. You've entered 3 fields, and that's enough for now," ?"even though dBASE II permits up to 32 fields." ACCEPT "Press the key" TO END STORE 'END' TO FIELDDEF STORE FIELDNO - 1 TO FNOHOLD STORE 1 TO OK LOOP ENDIF IF FIELDNO # 1 ACCEPT " &FIELDX" TO FIELDDEF IF !(FIELDDEF) = 'QUIT' QUIT ENDIF ENDIF IF FIELDDEF = ' ' STORE 'END' TO FIELDDEF STORE FIELDNO - 1 TO FNOHOLD LOOP ENDIF STORE TRIM(FIELDDEF) TO FIELDDEF STORE LEN('&FIELDDEF') TO LENGTH STORE 1 TO S STORE LENGTH TO L STORE @(',',$(FIELDDEF,S,L)) TO COMMAL IF COMMAL = 0 ?"You didn't enter commas separating the fieldname, fieldtype, and" ?"fieldlength specifications. Please try it again." STORE ' ' TO FIELDDEF LOOP ENDIF STORE 0 TO COUNT STORE FIELDDEF+',' TO FIELDDEF STORE LEN('&FIELDDEF') TO LENGTH,L STORE ' ' TO PARSE1,PARSE2,PARSE3,PARSE4 STORE 0 TO PARSERR DO WHILE COUNT < 4 STORE COUNT + 1 TO COUNT STORE STR(COUNT,1) TO COUNTX IF L = 0 STORE 4 TO COUNT LOOP ENDIF STORE @(',',$(FIELDDEF,S,L)) TO COMMAL IF COMMAL = 1 ?"Don't enter 2 commas in a row, or end a field with a comma. Please try" ?"it again." STORE 1 TO PARSERR STORE 4 TO COUNT LOOP ENDIF STORE $(FIELDDEF,S,(COMMAL - 1)) TO PARSE&COUNTX STORE S + COMMAL TO S STORE L - COMMAL TO L ENDDO IF PARSERR = 1 STORE 0 TO PARSERR STORE ' ' TO FIELDDEF LOOP ENDIF IF (PARSE1 = ' ' .OR. PARSE2 = ' ' .OR. PARSE3 = ' ') ?"NAME, TYPE, and WIDTH must be specified. Please try it again." STORE ' ' TO FIELDDEF LOOP ENDIF STORE !(PARSE1) TO PARSE1 IF LEN(PARSE1) > 10 ?"NAME specification may not exceed 10 characters. Please try it again." STORE ' ' TO FIELDDEF LOOP ENDIF STORE !(PARSE2) TO PARSE2 IF (PARSE2 # 'C' .AND. PARSE2 # 'N' .AND. PARSE2 # 'L') ?"TYPE must be either C, N, or L. Please try it again." STORE ' ' TO FIELDDEF LOOP ENDIF IF !(PARSE2) = 'L' .AND. PARSE3 # '1' ?"LOGICAL types may only have a length of 1. Please try again." STORE ' ' TO FIELDDEF LOOP ENDIF IF (VAL(PARSE3) > 99 .AND. STR(VAL(PARSE3),3) # PARSE3) .OR.; (VAL(PARSE3) > 9 .AND. VAL(PARSE3) < 100 .AND. STR(VAL(PARSE3),2) # PARSE3); .OR. (VAL(PARSE3) < 10 .AND. STR(VAL(PARSE3),1) # PARSE3) ?"Only numbers, without decimal points, may be entered in the" ?"length specification. Please try again." STORE ' ' TO FIELDDEF LOOP ENDIF IF PARSE4 # ' ' IF (VAL(PARSE4) > 99 .AND. STR(VAL(PARSE4),3) # PARSE4) .OR.; (VAL(PARSE4) > 9 .AND. VAL(PARSE4) < 100 .AND. STR(VAL(PARSE4),2) # PARSE4); .OR. (VAL(PARSE4) < 10 .AND. STR(VAL(PARSE4),1) # PARSE4) ?"Only numbers, without decimal points, may be entered in the" ?"decimal specification. Please try again." STORE ' ' TO FIELDDEF LOOP ENDIF ENDIF IF (&PARSE3 < 1 .OR. &PARSE3 > 254) ?"Length must be between 1 and 254. Please try it again." STORE ' ' TO FIELDDEF LOOP ENDIF IF PARSE4 # ' ' IF &PARSE4 >= &PARSE3 ?"The decimal specification must be at least one position shorter" ?"than the length specification. Please try it again." STORE ' ' TO FIELDDEF LOOP ENDIF ENDIF IF PARSE2 = 'C' .AND. PARSE4 # ' ' ?"Character fields may not have a decimal specification. Please try it" ?"again." STORE ' ' TO FIELDDEF LOOP ENDIF STORE PARSE1 TO T:NAME DO TEACHXC IF T:NAMEOK # 1 STORE ' ' TO FIELDDEF LOOP ENDIF STORE PARSE1 TO F&FIELDX.:NAME STORE PARSE2 TO F&FIELDX.:TYPE STORE &PARSE3 TO F&FIELDX.:LEN IF PARSE4 = ' ' STORE 0 TO F&FIELDX.:DEC ELSE STORE &PARSE4 TO F&FIELDX.:DEC ENDIF STORE FIELDNO + 1 TO FIELDNO STORE ' ' TO FIELDDEF ENDDO IF FNOHOLD = 0 ?"I'm afraid you didn't enter any fields. Please try it again." LOOP ENDIF STORE 1 TO OK ENDDO ERASE ?"Immediately following the creation of a file, dBASE II asks:" ? ?"ENTER DATA NOW?" ? ?"To which you would reply Y if you wish to enter data into your file," ?"or N if you don't want to. The method and format for entering data" ?"using the APPEND command is identical to the ENTER DATA NOW? format." ?"We're going to use the APPEND format, so you will learn it, and the" ?"ENTER DATA NOW? format, at the same time." ? ?"I'm going to put your file definition away now in a safe place. I'll be" ?"back in a few moments." WAIT DO TEACH11 RETURN WAIT DO TEACH11 RETURN WAIT DO TEACH11 RETURN t" ?"again." STORE ' ' TO FIELDDEF LOOP ENDIF STORE PARSE1 TO F&FIELDX.:NAME STORE PARSE2 TO F&FIELDX.:TYPE STORE &PARSE3 Tt" ?"again." STORE ' ' TO FIELDDEF LOOP ENDIF STORE PARSE1 TO F&FIELDX.:NAME STORE PARSE2 TO F&FIELDX.:TYPE STORE &PARSE3 TLDDEF LDDEF LDDEF LDDEF E3) < 10 .AND. STR(VAL(PARSE3),1) # PARSE3) ?ERASE ?"In lesson 9, &STUDENT, screen building and custom report building" ?"capabilities of dBASE II were covered. @ SAY was demonstrated, and" ?"the ZIP package functions mentioned." ? ?"Now, you are at the last lesson, lesson 10. If you thought that dBASE II" ?"has a lot of power based on what you've seen so far, this lesson should" ?"convince you that there is very little that you can't do with it." ?"Unlike much microcomputer software, dBASE II has programming features" ?"found only in rather powerful languages." ? ?"Every command that has been demonstrated can be placed in command" ?"procedures, which are the same as source programs for other languages." WAIT ERASE ?"In addition to the commands demonstrated so far, dBASE II also has" ?"DO, IF, and macro substitution capability. With these additional" ?"commands, not only do you have full programming capability, quite" ?"literally, you can do things that you would be unable to do, or do as" ?"easily, in conventional programming languages." WAIT ERASE ?"I have a command procedure that contains the commands necessary to" ?"illustrate these things. It is called CLIENTLS. Do not expect to" ?"become a programmer by reviewing this command procedure. It only serves" ?"as an illustration of the programming power within dBASE II. If you do" ?"understand programming concepts, a review of this command procedure," ?"coupled with everything else learned in these lessons, may convince" ?"you that you do not have to know any other language." WAIT ERASE ?"You're going to use a file called CLIENT, which contains client names and" ?"phone numbers (work, and home). The file also contains a field that" ?"indicates whether the client prefers to be called at work or at home." ?"Take a look at the structure of the file, &STUDENT.." ? STORE 'USE CLIENT' TO CHECK DO CHECKC ? STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC WAIT ERASE ?"The command procedure, essentially, reads every record on CLIENT, and" ?"displays the client's name and one of the phone numbers depending on the" ?"code contained in the work/home preference field. The command procedure" ?"contains a number of REMARK commands that do nothing but display items" ?"on the screen. Ignore them to determine the program flow." WAIT ERASE ?"The command procedure does not illustrate how to call other command" ?"procedures. You've been doing it every time you started me up by typing" ?"DO LESSONS. Now, I want you to start up the command procedure that" ?"illustrates DO, IF, and macro substitution." ? ?"Type DO CLIENTLS " STORE 'DO CLIENTLS' TO CHECK DO CHECKC WAIT ERASE ?"Well, that's all &STUDENT.. Remember, as I mentioned in lesson 4, you" ?"can create command procedures by using a line editor, a word processing" ?"package, or the MODIFY COMMAND command in dBASE II." WAIT ERASE ?"Before you QUIT for the last time though, I have a confession to make." ?"I didn't mention or show you all of the dBASE II commands. There are a" ?"few more, but I'm going to let you find out what they do on your own." ?"The commands I haven't mentioned are: COUNT, SUM, TOTAL, CANCEL," ?"CHANGE, EJECT, ERASE, LOOP, and NOTE (but REMARK, which is used in the" ?"CLIENTLS command procedure, is similar to NOTE)." WAIT ERASE ?"Well, it's time to QUIT for the last time. Please enter QUIT." STORE 'QUIT' TO CHECK DO CHECKC RETURN ?" NOTE an ?" NOTE an anguages." ? ?"Every command that has been demonstrated can be placed in command" ?"procedures, which are the same as source programs for other languages." WAIT ERASE ?"In addition to the commands demonstrated so far, dBASE II also has" ?"DO, IF, and macro substitution capability. With these additional" ?"commands, not only do you have full programming capability, quite" ?"literally, you can do things that you would be unable to do, or do as" ?"easily, in conventional programming langSET CONSOLE OFF USE MASTE DELETE ALL PACK STORE 0 TO COUNT DO WHILE COUNT < FNOHOLD STORE COUNT + 1 TO COUNT STORE STR(COUNT,1) TO COUNTX APPEND BLANK STORE !(F&COUNTX.:NAME) TO F&COUNTX.:NAME REPLACE FIELD:NAME WITH F&COUNTX.:NAME REPLACE FIELD:TYPE WITH F&COUNTX.:TYPE REPLACE FIELD:LEN WITH F&COUNTX.:LEN REPLACE FIELD:DEC WITH F&COUNTX.:DEC ENDDO IF FILE("&FILE") USE DELETE FILE &FILE ENDIF USE CREATE &FILE FROM MASTE USE SET CONSOLE ON ERASE ?"You've created &FILE., &STUDENT, and you're ready to USE it." ? ?"Type USE &FILE " STORE 'USE &FILE' TO CHECK DO CHECKC ?"Now DISPLAY the STRUCTURE of &FILE." ? ?"Type DISPLAY STRUCTURE " STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC WAIT ERASE ?"There are several ways to add data to a file in dBASE II. You" ?"can APPEND, EDIT, or INSERT data. We're going to use the APPEND" ?"command. EDIT and INSERT work in a similar fashion, and we will use" ?"EDIT in lesson 2. For now, let's use APPEND. Type APPEND and press" ?", and the screen will be formatted to enter data in &FILE.." ?"Enter data into each field, and press to go to the next" ?"field. After you've entered several records, press before" ?"entering data in the first field of the next record. You will then come" ?"back to me, and we will continue the lesson." ? ?"Please don't enter more than 10 records into the file. dBASE II permits" ?"over 65,000 records per file, but that's too much for this example." ? STORE 0 TO AOK DO WHILE AOK = 0 ?"Type APPEND " STORE 'APPEND' TO CHECK DO CHECKC GOTO TOP STORE 0 TO RECCOUNT DO WHILE .NOT. EOF STORE RECCOUNT + 1 TO RECCOUNT SKIP ENDDO IF RECCOUNT = 0 ?"I'm afraid you didn't enter any records onto &FILE.. When the" ?"first entry screen appears, don't press the key immediately." ?"Instead, enter data for at least one of the screens." ? LOOP ELSE STORE 1 TO AOK GOTO TOP ENDIF ENDDO ERASE ?"Now you have some data on your file. You may view the data on &FILE" ?"using the DISPLAY command. A single record may be displayed, or you may" ?"see all of records in the file. DISPLAY, with no qualifier, shows you" ?"the record you are currently working with. DISPLAY ALL displays all" ?"of the records in the file. We're going to display all of the records" ?"in &FILE.." ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"Now let's try a REPORT, &STUDENT.." WAIT ERASE ?"To generate a report, type REPORT and press the key. A file" ?"must be in USE when you do a report, but we are already USING &FILE.." ?"You will be asked for fields to be printed in the REPORT, and the fields" ?"must be within the file currently in USE. Right now, that's &FILE.. I'm" ?"going to DISPLAY the STRUCTURE of &FILE, so you use correct field names" ?"in your report. When you do a report on your own, you should DISPLAY the" ?"STRUCTURE of the file in USE, just like I'm going to do. Otherwise," ?"you're liable to be part way into the report definition, and have to" ?"cancel it because you can't remember how to spell a fieldname." WAIT ERASE DISP STRU ? ?"Type REPORT " STORE 'REPORT' TO CHECK DO CHECKC1 RELEASE PRINTER,DRIVE,TDRIVE,LENGTH,S,L,COMMAL,PARSE1,; PARSE2,PARSE3,PARSE4,PARSERR,END,AOK,RECCOUNT DO TEACH1R WAIT ?"Before you try dBASE II on your own, there is one other thing you should" ?"be aware of. When you make an error entering a command when I'm not" ?"around, dBASE II will not tell you what your mistake was." DO TEACH1S ERASE ?"I'd like you to QUIT now, but after you have, I would like you to try" ?"dBASE II on your own." ? ?"After you've QUIT, please: 1) Start up dBASE II again and enter a date," ?"2) CREATE a file (the same one you did with me if you'd like, 3) USE" ?"the file, 4) DISPLAY it's STRUCTURE, 5) DISPLAY it's contents, 6) prepare" ?"a REPORT, and 7) QUIT dBASE II" ? ?"all without my help, &STUDENT.." ? ?"Type QUIT " USE DELETE FILE &FILE DELETE FILE &RNAME..FRM STORE 'QUIT' TO CHECK DO CHECKC RETURN ?"You've created &FILE., &STUDENT, and you're ready to USE it." ? ?"Type USE &FILE " STORE 'USE &FILE' TO CHECK DO CHECKC ?"Now DISPLAY the STRUCTURE of &FILE." ? ?"Type DISPLAY STRUCTURE " STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC WAIT ERASE ?"There are several ways to add data to a file in dBASE II. You" ?"can APPEND, EDIT, or INSERT data. We're going to use the APPEND" ?"command. EDIT and INSERT work in a similar fashion, and we will use" ?"EDIT in lesson 2. For nowERASE ?"Like files, dBASE II names REPORT formats. Like file names, report" ?"format names may not exceed 8 characters." ? ?"Please enter a formname for your REPORT and press the key." ? STORE 0 TO OK DO WHILE OK = 0 ACCEPT 'ENTER REPORT FORM NAME' TO RNAME STORE !(RNAME) TO RNAME IF RNAME = 'QUIT' QUIT ENDIF IF RNAME = ' ' ?"I'm afraid you didn't enter anything. Please try again." LOOP ENDIF STORE TRIM('&RNAME') TO RNAME IF LEN('&RNAME') > 8 ?"I'm afraid you entered a name with more than 8 characters. Please try" ?"again." LOOP ENDIF IF @(' ','&RNAME') # 0 ?"Imbedded blanks are not permitted in the REPORT name. Please try again." LOOP ENDIF STORE RNAME TO T:NAME DO TEACHXC IF T:NAMEOK # 1 LOOP ENDIF STORE 1 TO OK ENDDO ?"Now, dBASE II needs to know three things: 1)The print position of the left" ?"margin of the report (the M specification), 2)The number of lines that can" ?"be contained on one page of the report (the L specification), and 3)The" ?"width of the page in characters, or the right hand margin of the report" ?"(the W specification)." ? ?"If you don't enter these specifications, dBASE II automatically chooses" ?"(by default), M=1, L=60, W=80. We're going to change these defaults," ?"and set M to 1, L to 55, and W to 70." ? ?"Type M=1,L=55,W=70 " STORE 'M=1,L=55,W=70' TO CHECK STORE 'ENTER OPTIONS, M=LEFT MARGIN, L=LINES/PAGE,W=PAGE WIDTH' TO PROMPT DO CHECKC1 ERASE ?"You may optionally specify a page heading on the REPORT. Let's put one" ?"on it." ? ?"Type Y " STORE 'Y' TO CHECK STORE 'PAGE HEADING(Y/N)?' TO PROMPT DO CHECKC1 ?"You may now enter the heading that will appear at the top of each page" ?"of your report. dBASE II will automatically center the page heading for" ?"you. Since this is a name and address report, let's call the report" ?"just that." ? ?"Type NAME AND ADDRESS REPORT " STORE 'ENTER PAGE HEADING' TO PROMPT STORE 'NAME AND ADDRESS REPORT' TO CHECK DO CHECKC1 ERASE ?"Next, dBASE II will ask if you'd like to double space your report, and" ?"if you wish to have numeric fields totaled at the end of the report." ?"Besides report totals, dBASE II permits sub-totaling on a field in your" ?"file. Let's not ask for any totals for this report (they aren't rele-" ?"vant for a name and address file), but if you'd like to try some" ?"totaling after the lesson is over, do that." ? ?"Type Y " STORE 'DOUBLE SPACE REPORT?(Y/N)' TO PROMPT STORE 'Y' TO CHECK DO CHECKC1 ? ?"Type N " STORE 'TOTALS REQUIRED?(Y/N)' TO PROMPT STORE 'N' TO CHECK DO CHECKC1 ERASE ?"Next, dBASE II will ask which fields in &FILE are to be printed on the" ?"REPORT &RNAME.. You may include one or all of the fields in &FILE in the" ?"report. For each field, you must specify the number of print positions" ?"the field will occupy on the report. The width on the report may be less" ?"than the width of the field on the file. For example, if an address" ?"field is 40 characters wide on the file, you could request that it be" ?"printed in only 10 or 15 positions on the report. This automatic" ?"wraparound feature is very nice when there is limited width on your CRT" ?"or printer, and you have large width fields on your file." WAIT ERASE ?"One final caution before you start entering the width and field" ?"specifications for your report. Make sure that the sum of all the field" ?"widths does not exceed the width specified in the report width" ?"specification (W specification, 70 for our report). There is no auto-" ?"matic wraparound facility for this." WAIT ERASE ?"Well, let's give it a try. When prompted, enter the field print width," ?"followed by a comma, followed by the name of the field in &FILE.. Here's" ?"an example for a field called NAME which is 30 characters in width on" ?"the file, but which is to be printed within 20 characters on the report:" ?" 20,NAME" ?"After each field entry, press the key, and after you have entered" ?"all of the fields to be printed, press the RETURN key again. Then you'll" ?"see your report on the display screen." WAIT STORE 0 TO ROK DO WHILE ROK = 0 DO TEACH1R1 ENDDO RETURN ort. Make sure that the sum of all the field" ?"widths does s for your report. Make sure that the sum of all the field" ?"widths does r report. Make sure that the sum of all the field" ?"widths does ur report. Make sure that the sum of all the field" ?"widths does ort. Make sure that the sum of all the field" ?"widths does Make sure that the sum of all the field" ?"widths does . Make sure that the sum of all the field" ?"widths does our report. Make sure that the sum of all the field" ?"widths does STORE 0 TO ROK ure that the sum of all the field" ?"widths does STORE 0 TO ROK ure that the sum of all the field" ?"widths does STORE 0 TO ROK tion), 2)The number of liERASE ?"I'll enter the report specification for the NAME field for you, so you" ?"know how it's done. I'm going to use the wraparound feature and print" ?"NAME in 15 positions even though the field is 30 characters wide." ? ?"COL WIDTH,CONTENTS" STORE 1 TO RCOUNT STORE 0 TO OK STORE 0 TO FIRST DO WHILE OK = 0 IF RCOUNT = 1 ?" 1:15,NAME" ? ?"Press the key, and I'll enter it." SET CONSOLE OFF WAIT SET CONSOLE ON ENDIF STORE STR(RCOUNT,1) TO RCOUNTX IF RCOUNT # 1 IF FIRST = 0 STORE 1 TO FIRST ?"You're on your own now to enter fields and headings on your report." ?"Good luck &STUDENT.." ENDIF IF RCOUNT > 3 ?"I believe you have entered all of the fields for the report. Please press" ?"the key to continue." WAIT STORE 1 TO OK LOOP ENDIF ACCEPT ' &RCOUNTX' TO R&RCOUNTX IF !(R&RCOUNTX) = 'QUIT' QUIT ENDIF ELSE STORE '15,NAME' TO R&RCOUNTX ENDIF IF R&RCOUNTX = ' ' STORE 1 TO OK LOOP ENDIF STORE TRIM(R&RCOUNTX) TO R&RCOUNTX STORE !(R&RCOUNTX) TO R&RCOUNTX STORE @(',',R&RCOUNTX) TO COMMA IF COMMA = 1 ?"A comma cannot be the first character in a report field specification." ?"Please try again." LOOP ENDIF STORE COMMA + 1 TO COMMAN IF COMMA = 0 ?"You didn't enter a comma between the width and contents specifications." ?"Please try again." LOOP ENDIF STORE LEN(R&RCOUNTX) TO LR STORE LR - COMMA TO LR STORE @(',',$(R&RCOUNTX,COMMAN,LR)) TO COMMA2 IF COMMA2 # 0 ?"I,m afraid you entered more than 1 comma. Please try again." LOOP ENDIF STORE $(R&RCOUNTX,COMMAN,LR) TO FHNAME STORE 0 TO RLOOP DO WHILE RLOOP < FNOHOLD STORE RLOOP + 1 TO RLOOP STORE STR(RLOOP,1) TO RLOOPX IF $(R&RCOUNTX,COMMAN,LR) = F&RLOOPX.:NAME STORE 1 TO FOUND STORE FNOHOLD TO RLOOP ELSE STORE 0 TO FOUND ENDIF ENDDO IF FOUND # 1 ?"I'm afraid the fieldname &FHNAME does not exist on &FILE." STORE 0 TO RLOOP1 ?"Valid field name(s) is/are:" DO WHILE RLOOP1 < FNOHOLD STORE RLOOP1 + 1 TO RLOOP1 STORE STR(RLOOP1,1) TO RLOOPX STORE F&RLOOPX.:NAME TO HLDNAME ?" &HLDNAME" ENDDO LOOP ELSE STORE $(R&RCOUNTX,1,COMMA -1) TO R&RCOUNTX.LEN STORE VAL(R&RCOUNTX.LEN) TO R&RCOUNTX.LENN IF R&RCOUNTX.LENN > 99 STORE STR(R&RCOUNTX.LENN,3) TO RLENGTH ELSE IF R&RCOUNTX.LENN > 9 STORE STR(R&RCOUNTX.LENN,2) TO RLENGTH ELSE STORE STR(R&RCOUNTX.LENN,1) TO RLENGTH ENDIF ENDIF IF RLENGTH # R&RCOUNTX.LEN ?"The width must be numeric. Please try again." LOOP ENDIF IF R&RCOUNTX.LENN < 1 .OR. R&RCOUNTX.LENN > 254 ?"The width must be a number between 1 and 254. Please try again." LOOP ENDIF IF RCOUNT = 1 ?"I'll enter the heading for the NAME field for you." ?"ENTER HEADING: NAME OF PERSON." ? ?"Please press the key." STORE 'NAME OF PERSON' TO H&RCOUNTX SET CONSOLE OFF WAIT SET CONSOLE ON ENDIF IF RCOUNT # 1 ?"Now enter the report column heading for the &FHNAME field." ACCEPT 'ENTER HEADING' TO H&RCOUNTX IF !(H&RCOUNTX) = 'QUIT' QUIT ENDIF ENDIF ENDIF STORE RCOUNT + 1 TO RCOUNT ENDDO STORE 0 TO TOTLEN STORE 1 TO COUNT DO WHILE COUNT < RCOUNT STORE STR(COUNT,1) TO COUNTX STORE R&COUNTX.LENN + TOTLEN TO TOTLEN STORE COUNT + 1 TO COUNT ENDDO IF TOTLEN > 70 ?"I'm afraid the sum of the print field widths is greater than 70 (for" ?"this report, we set the report width to 70). You'll have to enter them" ?"again." WAIT RETURN ENDIF ?"I've got to put your report away now. dBASE II won't take as long as I" ?"do to show you your report, but I'm a little slower. I'll be back in a" ?"few moments." WAIT USE MASTE DELETE ALL PACK APPEND BLANK REPLACE FIELD:NAME WITH 'FIELD' REPLACE FIELD:TYPE WITH 'C' REPLACE FIELD:LEN WITH 80 REPLACE FIELD:DEC WITH 0 IF FILE("T1RDBF") DELETE FILE T1RDBF ENDIF CREATE T1RDBF FROM MASTE USE T1RDBF APPEND BLANK REPLACE FIELD WITH 'M=1,L=55,W=70' APPEND BLANK REPLACE FIELD WITH 'Y' APPEND BLANK REPLACE FIELD WITH ' NAME AND ADDRESS REPORT' APPEND BLANK REPLACE FIELD WITH 'Y' APPEND BLANK REPLACE FIELD WITH 'N' STORE 0 TO FRCOUNT DO WHILE FRCOUNT < RCOUNT - 1 STORE FRCOUNT + 1 TO FRCOUNT STORE STR(FRCOUNT,1) TO FRCOUNTX APPEND BLANK REPLACE FIELD WITH R&FRCOUNTX APPEND BLANK REPLACE FIELD WITH H&FRCOUNTX ENDDO COPY TO &RNAME..FRM SDF USE &FILE REPORT FORM &RNAME ?"Nice report, &STUDENT!" WAIT ERASE ?"Once you've created a report, you can request it again, without" ?"re-entering the report specifications, by referring to it's formname." ?"In our example, that's &RNAME.. Let's see the report one more time." ? ?"Type REPORT FORM &RNAME " STORE 'REPORT FORM &RNAME' TO CHECK DO CHECKC1 REPORT FORM &RNAME WAIT ERASE ?"By adding the phrase TO PRINT to the report request, you can direct the" ?"report to the printer, and it will appear on the CRT and the printer." ?"In our example, the command would be: REPORT FORM &RNAME TO PRINT." STORE 1 TO ROK RETURN e ra ?"Nice raE ?"Nice raME ?"Nice ra ?"Nice ra ?"Nice ra report, you can request it again, without" ?"re-entering the report specifica- tions, by referring to it's formname." ?"In our example, that's &RNAME. Let's see the report one more time." o put your report away now. dBASEII won't take as long as I" ?"do to show you your report, but I'm a little slower. I'll ?"Nice ra ?"Nice ra ?"Nice ra report, you can request it again, without" ?"re-entering the report specifica- tions, by referring to it's formname." ?"In our example, that's &RNAME. Let's see the report one more time." o put your report away now. dBASEII won't take as long as I" ?"do to show you your report, but I'm a little slower. I'll o put your report away now. dBASEII won't take as long as I" ?"do to show you your report, but I'm a little slower. I'll STORE STR(FRCOUNT,1) TO FRCOUNTX APPEND BLANK REPLACE FIELD WITH R&FRCOUNTX APPEND BLANK STORE STR(FRCOUNT,1) TO FRCOUNTX APPEND BLANK REPLACE FIELD WITH R&FRCOUNTX APPEND BLANK COUNT + 1 TO RCOUNT ENDDO STORE 0 TO TOTLEN STORE 1 TO COUNT DO WHILE COUNT < RCOUNT STORE STR(COUNT,1) TO COUNTX STORE R&COUNTX.LENN + TOTLEN TO TOTLEN STORE COUNT + 1 TO COUNT ENDDO IF TOTLEN > 70 ?"I'm afraid the sum of the print field widths is greater than 70 (for" ?"this reWAIT ERASE ?"Instead, an error message similar to the one below will appear." ? ?" *** SYNTAX ERROR ***" ?" ?" ?" command" ? ?"CORRECT AND RETRY?(Y/N)" ? ?"You then have the opportunity to correct the command if you wish." ?"Try this example. Let's say that you misspell USE when you wish to USE" ?"&FILE.. Instead of entering USE &FILE, you enter UES &FILE.." ? ?"Type UES &FILE " STORE 'UES &FILE' TO CHECK DO CHECKC1 ?"*** SYNTAX ERROR ***" ?" ?" ?" &COMMAND" ?"CORRECT AND RETRY? (Y/N)" WAIT ERASE ?"If you enter a Y, some messages will appear that are shown to give you" ?"the opportunity to change characters within the command. In our case," ?"we want to change the letters ES to SE, so USE is spelled properly." ?"Give it a try, &STUDENT.." ? ?"Type Y " STORE 'Y' TO CHECK STORE 'CORRECT AND RETRY (Y/N)?' TO PROMPT DO CHECKC1 ?"Now, dBASE II will display the message CHANGE FROM:. At this point, it" ?"wants to know which characters in the command have to be changed. For" ?"you, it's the letters ES." ? ?"Type ES " STORE 'ES' TO CHECK STORE 'CHANGE FROM' TO PROMPT DO CHECKC1 WAIT ERASE ?"Then dBASE II will display the message CHANGE TO: For us, ES has to be" ?"changed to SE." ? ?"Type SE " STORE 'SE' TO CHECK STORE 'CHANGE TO' TO PROMPT DO CHECKC1 WAIT ERASE ?"Then, dBASE II will display the corrected command, like this:" ? ?"USE &FILE" ? ?"Then dBASE II will ask if any more corrections are desired. We have no" ?"more to make, since the command is OK now, so you should enter N." ? ?"Type N " STORE 'N' TO CHECK STORE 'MORE CORRECTIONS' TO PROMPT DO CHECKC1 WAIT ERASE ?"Sometimes, it's easier to re-enter the entire command, rather than go" ?"through the CHANGE FROM, CHANGE TO procedure. To do this, respond N" ?"when the CORRECT AND RETRY (Y/N) message is displayed. A period (.) will" ?"then be displayed, and the command can be re-entered in it's entirety." ? ?"Generally, a spelling error is the cause of a SYNTAX ERROR message, so" ?"be very careful how you spell things. Some other frequent causes of" ?"errors are field names being used when they do not exist on the file" ?"being USEd, and attempting to USE a file which is not on the disk drive" ?"that dBASE II programs are on. For example, if dBASE II was initiated on" ?"drive B:, and &FILE is on drive A:, we would have had to enter USE" ?"A:&FILE in our example above." WAIT ERASE ?"One final thing for this lesson. To leave dBASE II, and return to the" ?"operating system, the QUIT command is used." WAIT ERASE RETURN is displayed. A period (.) will" ?"then be displayed, and the command can be re-entered in it's entirety." ? ?"GeneralERASE ?"In lesson 1, you learned how to CREATE a file, APPEND data to it, DISPLAY" ?"its STRUCTURE and contents, generate a REPORT, correct syntax errors," ?"and QUIT dBASE II." ? ?"In this second lesson, you will learn how to EDIT data in a file, DELETE" ?"records from a file, RECALL records which have been deleted, REPLACE" ?"the contents of fields, and also, how to position yourself in a file by" ?"using GO and SKIP commands. For this lesson, we'll use a name and" ?"address file that contains the names and addresses of some of my" ?"friends." ? ?"You can name the file. Remember, the name cannot exceed 8 characters." STORE 0 TO OK DO WHILE OK = 0 ? ACCEPT "Enter the filename" TO FILE STORE !(FILE) TO FILE IF FILE = 'QUIT' QUIT ENDIF IF LEN("&FILE") > 8 ?"Filename cannot exceed 8 characters. Please try again." LOOP ENDIF IF FILE = ' ' ?"You didn't enter a filename. Please try again." LOOP ENDIF IF @(' ','&FILE') # 0 ?"Imbedded blanks are not permitted in the filename. Please try again." LOOP ENDIF STORE FILE TO T:NAME DO TEACHXC IF T:NAMEOK # 1 LOOP ENDIF STORE 1 TO OK ENDDO USE TUTNABK COPY TO &FILE WAIT ERASE ?"You can now start USEing &FILE.. Remember the format of the USE command?" ?"In case you don't, I'll refresh your memory. Format of the USE command is:" ? ?" USE filename" ? ?"In this case, the command is USE &FILE.." ? ?"Type USE &FILE " STORE 'USE &FILE' TO CHECK DO CHECKC WAIT ERASE ?"Now, see what the structure of &FILE is." ? ?"Type DISPLAY STRUCTURE " STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC ?"Now, DISPLAY ALL the records in &FILE.." ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC WAIT ERASE ?"Let's EDIT some records, to change the contents of some fields" ?"within the records. We'll start with record 1, but you may EDIT" ?"more records by pressing the key after editing the last field" ?"in a record. When you press the key while positioned at the" ?"the last field in a record, dBASE II will position you at the first" ?"field of the next record. You may then EDIT that record, or press" ?"the CONTROL (ctrl) and W keys at the same time to discontinue the" ?"EDIT." ? ?"NOTE: There are a number of ctrl functions to position the cursor while" ?"in EDIT (or BROWSE, APPEND, MODIFY, and other full screen commands)." ?"The dBASE II reference card which is packaged with dBASE II LESSONS" ?"contains a diagram and explanation of all keys, and their functions." ?"Please look at that section of the reference card now." WAIT ERASE ?"Type EDIT 1 " STORE 'EDIT 1' TO CHECK DO CHECKC ERASE ?"Let's DISPLAY the data in &FILE now, so you can see it with the" ?"changes you made." ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC DO TEACH2R ERASE ?"To look at the last record, use the GOTO command followed by the" ?"the DISPLAY command." ? ?"Type GOTO BOTTOM " STORE 'GOTO BOTTOM' TO CHECK DO CHECKC ?"Now, type DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC ?"Now let's DELETE the last record." ? ?"Type DELETE " STORE 'DELETE' TO CHECK DO CHECKC WAIT ERASE ?"Now, let's DISPLAY ALL the records on &FILE.." ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"Notice the * in the first position of the last record. That means it's" ?"flagged for deletion. Any record flagged for deletion will be" ?"physically deleted from the file when a PACK command is executed. Let's" ?"get rid of that last record." WAIT ERASE ?"Type PACK ." STORE 'PACK' TO CHECK DO CHECKC ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"Notice the last record is no longer there. You can do that to any" ?"record with the DELETE command." WAIT ERASE ?"You can RECALL records flagged for deletion, &STUDENT, with the RECALL" ?"command. Let's try it. First, you will have to DELETE a record, then" ?"do a DISPLAY to see that it was flagged for deleteion, then, RECALL it." ?"Do a final DISPLAY to see that it is no longer flagged for deletion." ? ?"Type DELETE " STORE 'DELETE' TO CHECK DO CHECKC DO TEACH21 RETURN CHECK DO CHECKC DO TEACH21 RETURN SE ?"Now, let's look at the last record. The GOTO coSE ?"Now, let's look at the last record. The GOTO coSE ?"Now, let's look at the last record. The GOTO cole when a PACK command is executed. Let's" ?"get rid of that last record." WAIT le when a PACK command is executed. Let's" ?"get rid of that last record." WAIT le when a PACK command is executed. Let's" ?"get rid of that last record." WAIT TRUCTURE " STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC ?"Now, DISPLAY ALL the records in &FILE.." ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC WAIT ERASE ?"Let's EDIT some records, to change the contents of some fields" ?"within the records. We'll start with record 1, but you may EDIT" ?"more records by pressing the key after editing the last ?"Now, let's see if the record is flagged for deletion." ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"The record is flagged for deletion. Let's get it back." WAIT ERASE ?"Type RECALL " STORE 'RECALL' TO CHECK DO CHECKC ? ?"Now, type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC WAIT ERASE ?"Only one more thing in this lesson. You can SKIP forward and backward" ?"in a dBASE II file. Let's GOTO the first record in &FILE, and then" ?"SKIP to the second record." ? ?"Type GOTO TOP " STORE 'GOTO TOP' TO CHECK DO CHECKC ? ?"Now, type SKIP " STORE 'SKIP' TO CHECK DO CHECKC ? ?"Now, type DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC ?"That's what record 2 looks like. You can also SKIP backwards any number" ?"of records by preceding the number of records to be SKIPped with a" ?"minus (-) sign." WAIT ERASE ?"Let's go back 1 record to the first record in the file." ? ?"Type SKIP - 1 " STORE 'SKIP - 1' TO CHECK DO CHECKC ?"Now, DISPLAY the first record, &STUDENT.." ? ?"Type DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC ?"And that's it for lesson 2. After you QUIT this time, get back into" ?"dBASE II and practice with EDIT (and INSERT and BROWSE, which are other" ?"commands for data editing), DELETE, RECALL, REPLACE, GOTO, and SKIP." ?"I'm going to go away now." USE DELETE FILE &FILE ? ?"Type QUIT " STORE 'QUIT' TO CHECK DO CHECKC RETURN C C  ?"Now, let's see if the record is flagged for deletion." ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"The record is flagged for deletion. Let's get it back." WAIT ERASE ?"Type RECALL " STORE 'RECALL' TO CHECK DO CHECKC ? ?"Now, type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC WAIT ERASE ?"Only one more thing in this lesson. You can SKIP forward and backward" ?"in a dBASE II file. Let's GOTO the first record in &FILE, and then" ?"SKIP to the second record." ? ?"Type GOTO TOP " STORE 'GOTO TOP' TO CHECK DO CHECKC ? ?"Now, type SKIP " STORE 'SKIP' TO CHECK DO CHECKC ? ?"Now, type DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC ?"That's what record 2 looks like. You can also SKIP backwards any number" ?"of records by preceding the number of records to be SKIPped with a" ?"minus (-) sign." WAIT ERASE ?"Let's go back 1 record to the first record in the file." ? ?"Type SKIP -1 " STORE 'SKIP -1' TO CHECK DO CHECKC ?"Now, DISPLAY the first record, &STUDENT.." ? ?"Type DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC ?"And that's it for lesson 2. After you QUIT this time, get back into" ?"dBASE II and practice with EDIT (and INSERT and BROWSE, which are other" ?"commands for data editing), DELETE, RECALL, REPLACE, GOTO, and SKIP." ?"I'm going to go away now." USE DELETE FILE &FILE ? ?"Type QUIT " STORE 'QUIT' TO CHECK DO CHECKC RETURN C C WAIT ERASE ?"There's another way to change data in fields besides the EDIT command." ?"Unlike EDIT, the REPLACE command does not build a screen for you. It" ?"changes the field specified in the REPLACE command. I've positioned" ?"&FILE to the first record. Let's see what it contains, &STUDENT.." GOTO TOP ? ?"Type DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC WAIT ERASE ?"Let's REPLACE the field NAME with your name, &STUDENT.. To do that" ?"type:" ? ?" REPLACE NAME WITH '&STUDENT' " ? ?"Notice the quotes around &STUDENT.. Since NAME is a character field," ?"quotation marks are necessary. Quotes are not required for numeric" ?"fields, however. Let's give it a try." STORE 0 TO OK DO WHILE OK = 0 ? ?"Type REPLACE NAME WITH '&STUDENT' " STORE "REPLACE NAME WITH '&STUDENT'" TO CHECK DO CHECKC ?"Now, let's DISPLAY the record to see the change." ? ?"Type DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC WAIT RETURN ich are other" ?"commands for data editing), DELETE, RECALL, REPLACE, GOTO, and SKIP." ?"I'm going to go away now." USE DELETE FILE &FILE ? ?"Type QUIT " STORE 'QUIT' TO CHECK DO CHECKC RETURN ERASE ?"In lesson 2, you learned how to edit data in files using the EDIT," ?"DELETE, RECALL, and REPLACE commands. You also learned how to" ?"position the dBASE II record pointer using the GOTO and SKIP" ?"commands." ? ?"In lesson 3, we're going to learn about 'scope' and 'for' specifications" ?"in dBASE II. 'Scope' is used to tell dBASE II whether the current," ?"next n, or all records within a file are to be considered in the" ?"execution of a command. 'For' specifies which groups or sets of" ?"records are to be considered in the execution of a command. 'Scope'," ?"and 'for' can be used individually, or in the same command with each" ?"other." ? ?"You'll recall in lesson 2 that we used the command DISPLAY ALL to" ?"display all of the records in a file. ALL is a 'scope' qualifier. Had" ?"we just said DISPLAY, only the current record in the file would have" ?"been displayed. With ALL, everyone of the records in the file were" ?"displayed." ? WAIT ERASE ?"'Scope' has 3 possibilities. If it is omitted, only the current record" ?"is processed by the command. If ALL is specified, all records in the" ?"file in USE are processed. If NEXT n (where n is a number) is" ?"specified, the next n records are processed by the command." ? ?"Let's try some examples. I have a name and address file saved that we" ?"can use for this lesson. It's the same file we used in lesson 2. If" ?"you'll name it for me, we can use it again." ? STORE 0 TO OK DO WHILE OK = 0 ACCEPT "Enter the filename " to FILE STORE !(FILE) TO FILE IF FILE = 'QUIT' QUIT ENDIF IF LEN("&FILE") > 8 ?"Filename may not exceed 8 characters. Please try again." LOOP ENDIF IF FILE = ' ' ?"You didn't enter a filename. Please try again." LOOP ENDIF IF @(' ','&FILE') # 0 ?"Imbedded blanks are not permitted in the filename. Please try again." LOOP ENDIF STORE FILE TO T:NAME DO TEACHXC IF T:NAMEOK # 1 LOOP ENDIF STORE 1 TO OK ENDDO WAIT SET CONSOLE OFF USE TUTNABK COPY TO &FILE SET CONSOLE ON ERASE ?"First, tell dBASE II to USE &FILE.." ? ?"Type USE &FILE " STORE 'USE &FILE' TO CHECK DO CHECKC ?"Now DISPLAY the first 3 records in &FILE.." ? ?"Type DISPLAY NEXT 3 " STORE 'DISPLAY NEXT 3' TO CHECK DO CHECKC ?"Now let's DELETE the first 4 records in &FILE.. GOTO the TOP of" ?"&FILE.." ? ?"Type GOTO TOP " STORE 'GOTO TOP' TO CHECK DO CHECKC ? ?"Now, type DELETE NEXT 4 " STORE 'DELETE NEXT 4' TO CHECK DO CHECKC WAIT ERASE ?"Now let's DISPLAY ALL of the records again." ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"Notice that the first 4 records are flagged for deletion." WAIT ERASE ?"To 'unflag' them you can RECALL ALL, or RECALL NEXT 4 (only after you" ?"GOTO TOP). RECALL ALL." ? ?"Type RECALL ALL " STORE 'RECALL ALL' TO CHECK DO CHECKC ? ?"Now, type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"The first 4 records have been RECALLed." WAIT ERASE DO TEACH3F RETURN nd. 'Scope'," ?"and 'for' can be used individually, or in the same command with each" ?"other." ? ?"You'll recall in lesson 2 that we used the command DISPLAY ALL to" ?"display all of the records in a file. ALL is a 'scope' qualifier. Had" ?"we just said DISPLAY, only the current record in the file would have" ?"been displayed. With ALL, everyone of the records in the file were" ?"displayed." ? WAIT ERASE ?"'Scope' has 3 possibilitiesWAIT ERASE ?"Everything you have learned so far is nice, but what's a computer" ?"without computations? dBASE II can compute very well. It can add," ?"subtract, multiply, and divide. I've made a file to illustrate how" ?"computations work in dBASE II. Please be aware, however, that " ?"computations are not limited to the contents of files. Computations" ?"can be performed on memory variables, they can be performed right" ?"on the screen, and can be used within expressions (you'll learn" ?"what all of these things are in future lessons). For now though, we'll" ?"see how can they can be used with the things you've learned." ? ?"I've CREATEd a file called COMPUTE, which contains payroll information" ?"for some of the people in the White House." WAIT ERASE ?"This is what the structure of the file looks like." USE COMPUTE DISP STRU ?"I also created a report to print the file, and show some totals of the" ?"information. I'll print the report for you." WAIT TO WAITM REPLACE ALL TAXES WITH 0 REPLACE ALL NETSALARY WITH 0 REPORT FORM COMPUTE ?"Notice that the TAXES and NET SALARY fields contain zeroes. You're going" ?"to perform some computations to place amounts in these fields." WAIT ERASE ?"Using the REPLACE command, we're going to compute TAXES by multiplying the" ?"SALCLASS field by .06, and then multiplying the MONTHSAL field by that" ?"product. The * in the REPLACE command indicates multiplication." ? ?"Type REPLACE ALL TAXES WITH ((SALCLASS * .06) * MONTHSAL) " STORE 'REPLACE ALL TAXES WITH ((SALCLASS * .06) * MONTHSAL)' TO CHECK DO CHECKC ? ?"Now, you're going to compute NETSALARY by subtracting TAXES from MONTHSAL." ? ?"Type REPLACE ALL NETSALARY WITH MONTHSAL - TAXES " STORE 'REPLACE ALL NETSALARY WITH MONTHSAL - TAXES' TO CHECK DO CHECKC ? ?"Finally, you're going to compute YTDSALARY (year-to-date salary) by" ?"adding NETSALARY to YTDSALARY." ? ?"Type REPLACE ALL YTDSALARY WITH YTDSALARY + NETSALARY " STORE 'REPLACE ALL YTDSALARY WITH YTDSALARY + NETSALARY' TO CHECK DO CHECKC WAIT ERASE ?"Now, &STUDENT, print the report with the computed fields in the file." ? ?"Type REPORT FORM COMPUTE " STORE 'REPORT FORM COMPUTE' TO CHECK DO CHECKC ? ?"The only computation facility you didn't use was divide. A '/' is used to" ?"perform that operation.?" RETURN - date salary) by adding NETSALARY to YTDSALARY. The" ?"command to do that looks like this: REPLACE ALL YTDSALARY WITH YTDSALARY" ?"+ NETSALARY The + indicates addition. Now, I'll do all that, an- date salary) by adding NETSALARY to YTDSALARY. The" ?"command to do that looks like this: REPLACE ALL YTDSALARY WITH YTDSALARY" ?"+ NETSALARY The + indicates addition. Now, I'll do all that, an ry variables, they can be performed right" ?"on the screen, and can be used within expressions (you'll learn" ?"what ERASE ?"As I mentioned earlier, the 'for' clause is used to specify groups or" ?"sets of records, and may be used by itself or in conjunction with a" ?"'scope' specification. &FILE has a field called NAME in it. We can" ?"use it to demonstrate the 'for' clause. NAME is a character field, but" ?"numeric and logical fields can be used in a similar fashion." GOTO TOP STORE NAME TO F1 STORE TRIM(F1) TO F1 ?"The field NAME in record 1 of &FILE contains:" ? ?" &F1" WAIT ERASE ?"Now, try a 'for' clause with a DISPLAY ALL. You will display all" ?"records, but only if NAME is equal to &F1.." STORE '=' TO OP DO TEACH3F1 WAIT ERASE ?"To DISPLAY ALL if NAME is not equal to &F1," ?"the command changes slightly." STORE '#' TO OP DO TEACH3F1 WAIT ERASE ?"And, to DISPLAY ALL if NAME is less than &F1," ?"the command changes slightly again." STORE '<' TO OP DO TEACH3F1 WAIT ERASE ?"The 'scope' specification could be NEXT n, rather than ALL. Besides" ?"equal to (=), not equal to (#), and less than (<), the 'for' clause" ?"can contain the following operators:" ? ?" greater than - >" ? ?" greater than or equal to - >=" ? ?" less than or equal to - <= or" ? ?" substring equal to - $" ? DO TEACH3C WAIT ERASE ?"Well, that's it for 'scope', 'for', and computations. After you QUIT" ?"this time, try some 'scope' and 'for' exercises on your own. Do some" ?"computations if you'd like to." WAIT ERASE ?"You can use 'scope' and 'for' with the following commands:" ?" CHANGE" ?" COPY" ?" COUNT" ?" *DELETE" ?" *DISPLAY" ?" LOCATE" ?" *REPLACE" ?" *RECALL" ?" *REPORT" ?" SUM and" ?" TOTAL" ? ?"An asterisk (*) precedes the commands we have covered so far." WAIT ERASE ?"The only restriction for use of 'scope' and 'for' applies to the" ?"REPORT command. ALL is assumed as scope, NEXT n may be specified, and" ?"current record is not permitted. This applies to the REPORT command" ?"only." WAIT ERASE USE DELETE FILE &FILE ?"And that's the end of lesson 3. QUIT, and I'll return you to the operating" ?"system." ? ?"Type QUIT " STORE 'QUIT' TO CHECK DO CHECKC RETURN WAIT ERASE ?"Well, that's it for 'scope', 'for', and computations. After you QUIT" WAIT ERASE ?"Well, that's it for 'scope', 'for', and computations. After you QUIT" WAIT ERASE ?"Well, that's it for 'scope', 'for', and computations. After you QUIT" WAIT ERASE ?"Well, that's it for 'scope', 'for', and computations. After you QUIT" ? ?" greater than or equal to - =>" ? ?" less than or equal to - =< or" ? ?" substring equal to - $" ? ?"If you're not familiar with substring pr ? ?" greater than or equal to - =>" ? ?" less than or equal to - =< or" ? ?" substring equal to - $" ? ?"If you're not familiar with substring prssumed as scope, NEXT n may be specified, and" ?"current record is not permitted. This applies to the REPORT command" ?"only." WAIT " ?"use it to demonstrate the 'for' clause. NAME is a character field, but" ?"numeric and logical fields can be used in a similar fashion." GOTO TOP STORE NAME TO F1 STORE TRIM(F1) TO F1 ?"The field NAME in record 1 of &FILE contains:" ? ?" &F1" WAIT ERASE ?"Now, try a 'for?"Here's how you tell dBASE II to do that." ? ?"Type DISPLAY ALL FOR NAME &OP '&F1' " STORE "DISPLAY ALL FOR NAME &OP '&F1'" TO CHECK DO CHECKC RETURN ARY (year-to-date salary) by" ?"adding NETSALARY to YTDSALARY." ? ?"Type REPLACE ALL YTDSALARY WITH YTDSALARY + NETSALARY " STORE 'REPLACE ALL YTDSALARY WIERASE ?"In lesson 3, &STUDENT, you learned how to use scope and for clauses," ?"and how to perform computations in dBASE II. In lesson 4, you're" ?"going to see how files can be placed in order, and how data on files" ?"can be located randomly. Record keys and indices are used to" ?"accomplish these tasks." SET CONSOLE OFF DELETE FILE EMPMAST DELETE FILE EMPNOIND DELETE FILE NAMEIND.NDX USE EMPBAK COPY TO EMPMAST SET CONSOLE ON WAIT ERASE ?"First, what is a key, or more properly a key field? A key is a data" ?"item which uniquely identifies a record on a file. It, therefore, can be" ?"used to FIND a record, without having to scan through every record on" ?"the file. A typical example is a company payroll file, which has a key" ?"field EMPNO (employee number). Other information on the file might be" ?"LASTNAME (the employee's last name), DEPTNO (department number), JOBCLASS" ?"(a job classification number to indicate the type of work this employee" ?"does), and TAXCLASS and GROSSSAL for tax deduction and gross salary" ?"information. As we shall see in future dBASE II LESSONS, the" ?"key fields in files can be used to JOIN files into complete data bases." WAIT ERASE ?"I just happen to have a file like the one I just described. I've called" ?"the file EMPMAST (EMPloyee MASTer). Please issue the command to use it." ? STORE 'USE EMPMAST' TO CHECK DO CHECKC ?"Now, display its structure." ? STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC WAIT ERASE ?"Now, I'd like you to display all of the records on EMPMAST." ? STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"Very good &STUDENT.." ? ?"Notice that the records are not in order by the employee number (EMPNO)." WAIT ERASE ?"There are two ways to put the records in order by employee number" ?"(EMPNO). You can INDEX the records, or you can SORT them. You'll SORT" ?"in a future lesson. Right now, you're going to INDEX them." ? ?"Type INDEX ON EMPNO TO EMPNOIND " STORE 'INDEX ON EMPNO TO EMPNOIND' TO CHECK DO CHECKC ?"The file EMPNOIND now contains key information for all records in the" ?"file EMPMAST. If we USE EMPMAST in conjunction with its INDEX file" ?"EMPNOIND, it will appear that all of the records on EMPMAST are in" ?"order by employee number." WAIT ERASE ?"Type USE EMPMAST INDEX EMPNOIND " STORE 'USE EMPMAST INDEX EMPNOIND' TO CHECK DO CHECKC ? ?"Now, type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ? ?"Notice &STUDENT, that the records are in sequence by employee number." ? ?"Now, let's try to FIND a record. You may specify any employee number" ?"that exists on EMPMAST. You pick the number." ? ?"Type FIND n, where n is an employee number, and press " STORE 0 TO OK DO WHILE OK = 0 ACCEPT TO COMMAND IF !(COMMAND) = 'QUIT' QUIT ENDIF IF $(!(COMMAND),1,5) # 'FIND ' ?"FIND followed by a blank, must be the first 5 characters in the command." ?" Please try again." LOOP ELSE &COMMAND IF # = 0 ?"I'm afraid that employee number does not exist. Please try it again." LOOP ELSE STORE 1 TO OK ENDIF ENDIF ENDDO ? ?"Now, DISPLAY the record." STORE 'DISPLAY' TO CHECK DO CHECKC WAIT ERASE ?"Later versions of dBASE II permit up to 7 indices of a file to be active" ?"at one time. I'm going to assume that you do not have a recent version," ?"and permit only one index to be active." ? ?"Let's, index the file EMPMAST on another field though (the LASTNAME field)" ?"to see how that works. Since LASTNAME may not be unique (that is, there" ?"may be several SMITH records), we'll FIND SMITH, and then SKIP to see if" ?"there are more." ? ?"Type USE EMPMAST " STORE 'USE EMPMAST' TO CHECK DO CHECKC WAIT ERASE ?"Now, type INDEX ON LASTNAME TO NAMEIND " STORE 'INDEX ON LASTNAME TO NAMEIND' TO CHECK DO CHECKC ? ?"Now, type USE EMPMAST INDEX NAMEIND " STORE 'USE EMPMAST INDEX NAMEIND' TO CHECK DO CHECKC ? ?"Now, DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"Now the records on EMPMAST are in order by last name." WAIT ERASE ?"Now, type FIND SMITH " STORE 'FIND SMITH' TO CHECK DO CHECKC ? ?"Type DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC ?"There's the first SMITH record." ? ?"Now, SKIP " STORE 'SKIP' TO CHECK DO CHECKC ?"Now, DISPLAY " STORE 'DISPLAY' TO CHECK DO CHECKC ? ?"And, there's the second SMITH record." WAIT DO TEACH4L ERASE ?"And that's all for INDEX, FIND, LOCATE, and CONTINUE. I want you to QUIT" ?"now, and try these commands on your own. Try some of the Boolean" ?"operators with any command that permits use of the FOR phrase as well." STORE 'QUIT' TO CHECK DO CHECKC RETURN ?"Now, DISPLAY ALL" ?"Now, DISPLAY ALL" ?"Now, DISPLAY ALL" ecord. You may specify any employee number" ?"that exists on EMPMAST. You pick the number." ? ?"Type FIND n, where n is an employee number, and press " STORE 0 TO OK DO WHILE OK = 0 ACCEPT TO COMMAND IF !(COMMAND) = 'QUIT' QUIT ENDIF IF $(!(COMMAND),1,5) # 'FIND ' ?"FIND followed by a blank, must be theERASE ?"Let's try one more thing before you leave this lesson. In lesson 3, I" ?"didn't tell you the whole truth about FOR clauses. Besides being able" ?"to use the arithmetic operators like =, <, >, =>, etc., you can also use" ?"the Boolean operators .AND., .OR., and .NOT.. In fact, you can use" ?"arithmetic and Boolean operators wherever dBASE II lets you use an" ?"expression (shown in dBASE II command examples as exp). Let's try" ?"some examples with the EMPMAST file. I've created a REPORT FORM to" ?"use with the examples. The formname is EMPMASTR. First, USE EMPMAST." STORE 'USE EMPMAST' TO CHECK DO CHECKC WAIT ERASE ?"Now, let's get a report of the entire file." ? ?"Type REPORT FORM EMPMASTR " STORE 'REPORT FORM EMPMASTR' TO CHECK DO CHECKC WAIT ERASE ? ?"Now, type REPORT FORM EMPMASTR FOR DEPTNO > 10 .AND. GROSSSAL < 1300" ?"" STORE 'REPORT FORM EMPMASTR FOR DEPTNO > 10 .AND. GROSSSAL < 1300' TO CHECK DO CHECKC WAIT ERASE ?"Now, type REPORT FORM EMPMASTR FOR TAXCLASS < 10 .OR. TAXCLASS > 75" ?"" STORE 'REPORT FORM EMPMASTR FOR TAXCLASS < 10 .OR. TAXCLASS > 75' TO CHECK DO CHECKC WAIT ERASE ?"The only limiting factor on the number of arithmetic and Boolean" ?"combinations in a command is the command length restriction in dBASE II." ?"Since commands can be up to 254 characters, it is most likely that you" ?"will get confused about what the expression means before you run out of" ?"positions to specify it." WAIT ERASE RETURN  WAIT ERASE ?"Let's LOCATE ALL FOR LASTNAME = 'SMITH'. Notice the quotation marks" ?"around SMITH. LASTNAME is a character field, and in the FOR phraseERASE ?"The INDEX command is useful for larger files where there is a need to" ?"access records randomly. For smaller files (50 records or less), you can" ?"accomplish the same results by using the LOCATE and CONTINUE commands." ? ?"LOCATE reads sequentially through the file in USE, and then presents" ?"record numbers that satisfy the FOR specification. Because LOCATE is" ?"LOCATEing records sequentially, it takes a long time to LOCATE" ?"records in larger files. INDEX on the other hand, does not take more" ?"than 2 or 3 seconds to FIND a record, no matter how big the file is." ?"Since our EMPMAST file is small, we can LOCATE records quickly too." WAIT ERASE ?"First, we have to use EMPMAST." STORE 'USE EMPMAST' TO CHECK DO CHECKC ?"Now, display all the records." STORE 'DISPLAY ALL' TO CHECK DO CHECKC WAIT ERASE ?"Now, LOCATE ALL FOR EMPNO = 22." STORE 'LOCATE ALL FOR EMPNO = 22' TO CHECK DO CHECKC STORE # TO REC STORE STR(REC,1) TO RECX ? ?"Record &RECX contains employee number 22 data. Now, DISPLAY." STORE 'DISPLAY' TO CHECK DO CHECKC ?"Enter CONTINUE now. dBASE II will see if any more records contain" ?"employee number 22." STORE 'CONTINUE' TO CHECK DO CHECKC ?"Since only one record contains employee number 22, an END OF FILE message" ?"is displayed. That would not be the case if you changed the locate" ?"slightly." WAIT ERASE ?"Let's LOCATE ALL FOR LASTNAME = 'SMITH'. Notice the quotation marks" ?"around SMITH. LASTNAME is a character field, and in the FOR phrase," ?"character fields must be enclosed in quotes." STORE "LOCATE ALL FOR LASTNAME = 'SMITH'" TO CHECK DO CHECKC STORE # TO REC STORE STR(REC,1) TO RECX ?"Record &RECX contains SMITH. Now, DISPLAY it." STORE 'DISPLAY' TO CHECK DO CHECKC ?"Now, CONTINUE." STORE 'CONTINUE' TO CHECK DO CHECKC ?"No END OF FILE message is displayed because there is another SMITH" ?"record on the file." STORE # TO REC STORE STR(REC,1) TO RECX ?"It's record number &RECX.. Let's look at that record. DISPLAY" STORE 'DISPLAY' TO CHECK DO CHECKC WAIT DO TEACH4B RETURN ?"Let's LOCATE ALL FOR LASTNAME = 'SMITH' Notice the quotation marks" ?"around SMITH. LASTNAME is a character field, and in the FOR phrase," ?"character fields must be enclosed in quotes. Try it." STORE "LOCATE ALL FOR LASTNAME = 'SMITH'" TO CHECK DO CHECKC s must be enclosed in quotes." STORE "LOCATE ALL FOR LASTNAME = 'SMITH'" TO CHECK DO CHECKC STORE # TO REC STORE STR(REC,1) TO RECX ?"Record &RECX contains SMITH. Now, DISPLAY it." STORE 'DISPLAY' TO CHECK DO CHECKC ?"Now, CONTINUE." STORE 'CONTINUE' TO CHECK DO CHECKC ?"No END OF FILE message is displayed because there is another SMITH" ?"record on the file." STORE # TO REC STORE STR(REC,1) TO RECX ?"It's record number &RECX.. Let's look at that record. DISPLAY" STORE ERASE ?"In lesson 4, &STUDENT, you learned about record keys, and their use" ?"with the INDEX and FIND commands. You also learned how to use LOCATE" ?"and CONTINUE for small files which were not indexed on a key." ? ?"In lesson 5, you're going to learn about some of the dBASE II file utility" ?"functions, a way to tell dBASE II that a new diskette has been placed in" ?"a disk drive (perhaps to back-up a file, like you'll do in this lesson)," ?"and finally, you'll see how to execute commands from disk, rather than" ?"entering them on the keyboard." WAIT ERASE ?"Remember in lesson 3, you had a file which contained payroll information" ?"for some of the people in the White House. If there is important" ?"information, this is it. Right? The janitor thinks so. I saved that" ?"file for this lesson too." ? ?"I called the file COMPUTE. We can see if it's still there with the" ?"DISPLAY FILE command. This command displays the file names for dBASE II" ?"files (and other files too) on disk." SET CONSOLE OFF DELETE FILE WHITEHSE USE COMPUTE1 DELETE ALL PACK SET CONSOLE ON WAIT ERASE ?"Type DISPLAY FILE " STORE 'DISPLAY FILE' TO CHECK DO CHECKC ?"Now, &STUDENT, start working with the file COMPUTE." ? ?"Type USE COMPUTE " STORE 'USE COMPUTE' TO CHECK DO CHECKC REPLACE ALL NETSALARY WITH 0 TAXES WITH 0 ? ?"Type DISPLAY ALL " STORE 'DISPLAY ALL' TO CHECK DO CHECKC WAIT ERASE ?"This is definitely important data. You wouldn't want to lose it." ?"To make sure that you don't lose the data, you're going to back-up" ?"COMPUTE. Essentially, what this amounts to is that you going to" ?"create a COPY of the file. Normally, the back-up copy would be made on" ?"a different diskette (other than the one the file is on), but since" ?"we're just demonstrating how a back-up is done, you'll put the back-up on" ?"the same disk as the file." ? ?"In a real back-up situation, where a different diskette is used to" ?"receive the file, the RESET command should be issued. This tells the" ?"system that a disk swap has occurred, and will eliminate the possibility" ?"of a disk error occurring." WAIT ERASE ?"OK. Let's make the back-up file, and let's call it WHITEHSE. The file" ?"currently in USE (COMPUTE) is copied to the back-up file with a COPY" ?"command." ? ?"Type COPY TO WHITEHSE " STORE 'COPY TO WHITEHSE' TO CHECK DO CHECKC ? ?"Now type DISPLAY FILE " STORE 'DISPLAY FILE' TO CHECK DO CHECKC ?"Now, both COMPUTE and WHITEHSE are on disk." WAIT ERASE ?"Before you continue with file utilities, let's take a look at how dBASE II" ?"lets you execute a number of commands without typing them all on the" ?"keyboard." ? ?"The DO command does this. It accesses a disk file, and executes all of" ?"the dBASEII commands in that Command Procedure." ? ?"You may create a Command Procedure through use of the operating" ?"system text editor, a word processing package, or the MODIFY COMMAND" ?"in dBASE II. I've created a Command Procedure that uses COMPUTE," ?"performs some calculations on the record contents, and produces a" ?"report to show the results." ? ?"I've called the Command Procedure WHITEHSE. If you enter DO WHITEHSE," ?"the Command Procedure will be accessed, and executed. I've set some" ?"things up so you can see the commands as they are executed, and then" ?"see the results of the execution. If this looks familiar to you," ?"it's because we did this in lesson 3, with you entering the commands from" ?"the keyboard." WAIT ERASE ?"Type DO WHITEHSE " STORE 'DO WHITEHSE' TO CHECK DO CHECKC WAIT ERASE ?"Now, let's examine two more utility functions. As I mentioned earlier," ?"the DISPLAY FILE command can display dBASE II files AND other files on disk" ?"(see the dBASE II TUTOR introduction for a description of the types of" ?"files supported by operating systems). The LIKE phrase is added to the" ?"command to display non-dBASE II files." ? ?"Type DISPLAY FILE LIKE *.CMD " STORE 'DISPLAY FILE LIKE *.CMD' TO CHECK DO CHECKC WAIT ERASE ?"dBASE II also lets you delete files. BE EXTREMELY CAREFUL WITH THIS" ?"COMMAND, however. ONCE DELETED, THE FILES CANNOT BE RETRIEVED. The" ?"files may be dBASE II files, or any other file type (through use of the" ?"file suffix, TXT for example)." ? ?"To illustrate, you're going to delete the WHITEHSE file. First, let's" ?"make sure that the WHITEHSE file is still around." ? ?"Type DISPLAY FILE " STORE 'DISPLAY FILE' TO CHECK DO CHECKC ?"Now, DELETE it, &STUDENT.." ? ?"Type DELETE FILE WHITEHSE " STORE 'DELETE FILE WHITEHSE' TO CHECK DO CHECKC WAIT ERASE ?"One last thing for this lesson. dBASE II permits file structures to be" ?"changed, or MODIFYd. This is very useful when you wish to add a (some)" ?"field to a file that already exists. I can't show you the MODIFY" ?"STRUCTURE command itself, you'll have to do that on your own, but I can" ?"show you how it can be used to change an existing file structure." ? ?"The COMPUTE file that we used earlier had several pieces of information" ?"about the White House staff. It did not have the phone extensions for" ?"them, however. By USEing COMPUTE, and then issuing the MODIFY" ?"STRUCTURE command we could add the PHONE field. After the structure" ?"has been modified, it will look like the structure in a file I have" ?"called COMPUTE1." WAIT ERASE ?"Type USE COMPUTE1 " STORE 'USE COMPUTE1' TO CHECK DO CHECKC ? ?"Now, type DISPLAY STRUCTURE " STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC ? ?"Notice that the PHONE field is in it." WAIT ERASE ?"COMPUTE1, however, has no data in it. By using the APPEND FROM command" ?"we can get all of the data that was on COMPUTE onto COMPUTE1." ? ?"Type APPEND FROM COMPUTE " STORE 'APPEND FROM COMPUTE' TO CHECK DO CHECKC ? ?"Now, COMPUTE1 has all of the information that was on COMPUTE, and COMPUTE1" ?"has a field where we can enter PHONE extensions." ? ?"One word of caution. MODIFY STRUCTURE E R A S E S all of the data" ?"on the file being modified. So, before issuing the MODIFY STRUCTURE" ?"command, copy the file to a back-up file or you will L O S E all of" ?"the data that W A S on your file." ? WAIT ERASE ?"Well, that's it for file utilities, and Command Procedures. After you" ?"QUIT this time, try some exercises on your own. DISPLAY, and COPY" ?"files. MODIFY the STRUCTURE of a file, and APPEND data to a new" ?"file structure FROM a copied file. If you feel bold, create a" ?"command procedure using MODIFY COMMAND. In future sessions, I'll" ?"show you how you can create some really powerful Command Procedures" ?"that can do as much as most conventional programming languages," ?"and do it with far fewer instructions. Now, however, it's time" ?"to quit again." ? STORE 'QUIT' TO CHECK DO CHECKC RETURN culations on the record contents, and produces a report to show the" ?"culations on the record contents, and produces a report to show the" ?"culations on the record contents, and produces a report to show the" ?"culations on the record contents, and produces a report to show the" ?" cucu ERASE ?"In lesson 5, &STUDENT, you covered the DISPLAY FILE and COPY file" ?"utilities. We also learned about MODIFY STRUCTURE, and how to" ?"APPEND data onto a MODIFYd file structure. You learned, too, about" ?"the creation of command procedures (or programs) in dBASE II." SET CONSOLE OFF DELETE FILE EMPMAST DELETE FILE EMPTRANS DELETE FILE EMPTSRT DELETE FILE EMPMSRT DELETE FILE TUTMEM.MEM USE EMPBAK COPY TO EMPMAST USE EMPTBAK COPY TO EMPTRANS SET CONSOLE ON ? ?"In lesson 6, you're going to learn about SORT, (another method for" ?"putting records in sequence, other than INDEX), UPDATE (a method for" ?"changing information on a file from another file), and how to work" ?"with memory using STORE, DISPLAY MEMORY, SAVE, RESTORE, RELEASE, and" ?"CLEAR." WAIT ERASE ?"Remember, in lesson 4, you used two key fields on a file called EMPMAST." ?"One key was EMPNO, another was EMPNAME. SORT can put files in order just" ?"like INDEX, but there is one big difference. When INDEX is used, the file" ?"will automatically have its index(es) updated, and therefore, be kept in" ?"in order, whenever APPEND, EDIT, REPLACE, READ, OR BROWSE are used to" ?"update the file. That is not the case with SORT. If changes are made to" ?"key fields in a SORTed file, the file must be re-sorted to get it back in" ?"sequence." WAIT ERASE ?"There are times, however, when a SORTed file is preferrable to an" ?"INDEXed file. We will demonstrate one in this lesson. In this" ?"example, we want the operation of preparing updates to EMPMAST" ?"to be a separate operation and be contained on a separate file" ?"(EMPTRANS), because balancing of the input is required prior to the" ?"UPDATE process. We would also like to have the ability to back-out" ?"transactions after updates have taken place (if, for example we find" ?"that some of the input contained errors that had to be easily removed" ?"from the master file). Had all of the input been entered from the" ?"keyboard using EDIT, back-out may be quite difficult." WAIT ERASE ?"The choice between using SORT or INDEX is a matter of system design." ?"Each system will dictate which method should be used. The purpose" ?"of this lesson is to show you how to use SORT if you feel the" ?"circumstances warrant it." WAIT ERASE ?"Enough said. Let's look at EMPMAST. By now I'm sure you know that" ?"you must use it, display it's structure, and then display all the" ?"records on it. If you make a mistake, I'll tell you what to do, but I" ?"want you to try to perform these three operations without me telling" ?"you specifically what to do." STORE 'USE EMPMAST' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'DISPLAY ALL' TO CHECK DO CHECKC WAIT ERASE ?"Now, &STUDENT, SORT EMPMAST on employee number (EMPNO). SORT will" ?"sort the file in USE on the key specified, and place the SORTed file on" ?"another file." ? ?"Type SORT ON EMPNO TO EMPMSRT " STORE 'SORT ON EMPNO TO EMPMSRT' TO CHECK DO CHECKC ?"Now, EMPMSRT file contains the data that is on EMPMAST in EMPNO" ?"(employee number) sequence. Let's take a look at EMPMSRT. We first" ?"have to use it, and then to see it, I have retained the REPORT FORM" ?"EMPMASTR from lesson 4. Try the USE and REPORT. I'll tell you if you" ?"make any mistakes." STORE 'USE EMPMSRT' TO CHECK DO CHECKC STORE 'REPORT FORM EMPMASTR' TO CHECK DO CHECKC ?"All the records are in order by employee number." WAIT ERASE ?"In UPDATE, a file is needed, which contains the changes to be made." ?"This file is generally referred to as a transaction file. The UPDATE" ?"command requires that the master file (EMPMAST) and the transaction" ?"file be in the same sequence. Our transaction file is called EMPTRANS." ? ?"Let's take a look at it. First USE it, then DISPLAY it's STRUCTURE," ?"and then DISPLAY ALL of the records on it. Try these three commands." ?"I'll help you, if you make any mistakes." STORE 'USE EMPTRANS' TO CHECK DO CHECKC STORE 'DISPLAY STRUCTURE' TO CHECK DO CHECKC STORE 'DISPLAY ALL' TO CHECK DO CHECKC WAIT ERASE ?"Now we have to SORT EMPTRANS to get it in order by EMPNO." ? ?"Type SORT ON EMPNO TO EMPTSRT " STORE 'SORT ON EMPNO TO EMPTSRT' TO CHECK DO CHECKC ?"Now, use EMPTSRT, and display all the records on it. I'll help you if" ?"you make errors in either of the two commands to do this." STORE 'USE EMPTSRT' TO CHECK DO CHECKC STORE 'DISPLAY ALL' TO CHECK DO CHECKC ?"Now, the transaction file is also in employee number sequence." WAIT DO TEACH6U RETURN number sequence." WAIT DO TEACH6U RETURN u feel the" ?"circumstanu feel the" ?"circumstanST in EMPNO" ?"(emplST in EMPNO" ?"(empl fields in a SORTed file, the file must be re-sorted to get it back in" ?"sequence." WAIT ERASE ?"There are times, however, when a SORTed file is preferrable to an" ?"INDEXed file. We will demonstrate one in this lesson. In this" ?"example, we want the operationERASE ?"Up to now, you have been dealing with only data on files. You're now going" ?"to see how to use memory variables. Memory variables are used in much" ?"the same fashion as fields on records. However, unlike fields on records," ?"memory variables are always available for immediate use. It is not" ?"necessary to read them from a file to access them. dBASE II permits" ?"up to 64 memory variables in memory at any one time, and also permits" ?"memory variables to be SAVEd on disk, for later RESTOREing." ? ?"Several commands deal with memory variables. They are: STORE, DISPLAY" ?"MEMORY, SAVE, RESTORE, RELEASE, and CLEAR." WAIT ERASE ?"Remember how REDFORD lost his name. Let's get REDFORD's name back" ?"using a memory variable." ? ?"Type STORE 'REDFORD' TO MEMNAME " STORE "STORE 'REDFORD' TO MEMNAME" TO CHECK DO CHECKC ? ?"Now, &STUDENT, type DISPLAY MEMORY " STORE 'DISPLAY MEMORY' TO CHECK DO CHECKC ?"I've got some things in memory too, but notice that there is a memory" ?"variable called MEMNAME, which contains REDFORD." WAIT ERASE ?"Using the EMPMSRT file, you can give REDFORD his name back from the" ?"memory variable MEMNAME." ? ?"Type USE EMPMSRT " STORE 'USE EMPMSRT' TO CHECK DO CHECKC ? ?"Now, DISPLAY." STORE 'DISPLAY' TO CHECK DO CHECKC ?"That's the old REDFORD record all right, with no name in it. Now," ?"REPLACE LASTNAME WITH MEMNAME" STORE 'REPLACE LASTNAME WITH MEMNAME' TO CHECK DO CHECKC ?"Now, DISPLAY" STORE 'DISPLAY' TO CHECK DO CHECKC ?"And, REDFORD has his last name back." WAIT ERASE ?"There may be instances where 64 memory variables are not enough for the" ?"work you have to do. For these instances, and other occasions where you" ?"want to SAVE memory variables (perhaps to be RESTOREd to memory the next" ?"day from a previous day's work), dBASEII provides the SAVE command. All" ?"memory variables are put on the disk file specified in the SAVE command." ? ?"Type SAVE TO TUTMEM " STORE 'SAVE TO TUTMEM' TO CHECK DO CHECKC ?"Now all the memory variables are on the disk file TUTMEM." WAIT ERASE ?"If you're finished with some memory variables, and want to make room for" ?"some more, the RELEASE command is used. Let's RELEASE one of yours, and" ?"one of mine." ? ?"Type RELEASE MEMNAME,PRINTER " STORE 'RELEASE MEMNAME,PRINTER' TO CHECK DO CHECKC ?"Now, DISPLAY MEMORY." STORE 'DISPLAY MEMORY' TO CHECK DO CHECKC ?"MEMNAME and PRINTER are no longer in memory. To release all memory" ?"variables, enter RELEASE ALL" STORE 'RELEASE ALL' TO CHECK DO CHECKC1 ?"Now, DISPLAY MEMORY." STORE 0 TO OK DO WHILE OK = 0 ACCEPT TO COMMAND IF !(COMMAND) = 'QUIT' QUIT ENDIF IF !(COMMAND) # 'DISPLAY MEMORY' ?"You didn't enter DISPLAY MEMORY. Please try again." LOOP ELSE RELEASE ALL DISPLAY MEMORY STORE 1 TO OK STORE ' ' TO PROMPT ENDIF ENDDO WAIT ERASE RESTORE FROM TUTMEM ?"Oh no, &STUDENT.. All the memory variables are gone, and I still need" ?"some of them. Let's get them back!!!!!!!!!" ? ?"Type RESTORE FROM TUTMEM " STORE 'RESTORE FROM TUTMEM' TO CHECK DO CHECKC ? ?"Now, DISPLAY MEMORY." STORE 'DISPLAY MEMORY' TO CHECK DO CHECKC WAIT ERASE ?"You can also RELEASE ALL the memory variables by entering CLEAR, and" ?"CLEAR will also take the file in USE out of the USE state. For example," ?"if you enter CLEAR now, the EMPMSRT file would no longer be in USE." WAIT ERASE RETURN ERASE ?"Now you've done it. All the memory variables are gone, and I still need" ?"some of them. Let's get them back!!!!!!!!! Type RESTORE FROM TUTMEM." STORE 'RESTORE FROM TUTMEM' TO CHECK DO CHECKC ERASE ?"Now you've done it. All the memory variables are gone, and I still need" ?"some of them. Let's get them back!!!!!!!!! Type RESTORE FROM TUTMEM." STORE 'RESTORE FROM TUTMEM' TO CHECK DO CHECKC  CHECK DO CHECKC ?"That's the old REDFORD record all right, with no name in it. Now," ?"REPLACE LASTNAME WITH MEMNAME" STORE 'REPLACE LASTNAME WITH MEMNAME' TO CHERASE ?"Now you're ready to try UPDATE. Both the master and transaction files" ?"(EMPMAST and EMPTRANS) are in sequence by EMPNO on the files EMPMSRT and" ?"EMPTSRT. First, you have to USE EMPMSRT." STORE 'USE EMPMSRT' TO CHECK DO CHECKC ?"Type UPDATE FROM EMPTSRT ON EMPNO REPLACE LASTNAME ADD GROSSSAL " STORE 'UPDATE FROM EMPTSRT ON EMPNO REPLACE LASTNAME ADD GROSSSAL' TO CHECK DO CHECKC WAIT ERASE ?"To see what the UPDATE did, type REPORT FORM EMPMASTR " STORE 'REPORT FORM EMPMASTR' TO CHECK DO CHECKC ?"Notice that REDFORD (employee 2) lost his name, and that GROSSSAL has" ?"been changed in all three records that had transactions. REDFORD lost" ?"his name, because REPLACE was used for the LASTNAME field, and the" ?"LASTNAME field in the transaction file for his record was blank." ?"GROSSSAL was increased or decreased based on the amounts that were in" ?"the GROSSSAL field on the transaction file." WAIT ERASE ?"There are ways, using command procedures, to exercise complete control" ?"over updates to files. We'll see how that can be done, in lesson 10." WAIT DO TEACH6M ERASE ?"That's it for SORT, UPDATE, and dealing with memory variables. After" ?"you've QUIT, practice with these commands, so you'll be able to use them" ?"in the future." ? ?"Please QUIT now." STORE 'QUIT' TO CHECK DO CHECKC RETURN STORE 'REPORT FORM EMPMASTR' TO CHECK FORM EMPMASTR' TO CHECK ords on it. If you make a mistake, I'll tell you what to do, but I" ?"want you to try to5m512z10p2s40t1d2i1l0h