nP -p4 UO`  @`!#@%`')+-/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]a Oogkmq uy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠ @` @`!A   !Aa!!#Ao')+-/1!3A5a79;=?A!CAEaGIKOQ!SAUaWY[]_a!Oeagkmoq!sAowy{}!AaO`  @`!#@%`')+-/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]a Oogkmq uy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠ @` @`!A   !Aa!!#Ao')+-/1!3A5a79;=?A!CAEaGIKOQ!SAUaWY[]_a!Oeagkmoq!sAowy{}!AaIBM10 ݌YIBM3 Ys. Y.. YPAYE1 BASY*PAYE2 BASYOPDBASIC COMY"pREAD ME Y\ ROBOT BASY_SEC BASY`SELECTP BASYcRTEXT BASYeVIDEO ASCYi[VIDEO BASYo9  PAYE1 for IBM PC's V PC4.0 28.04.1987= MICRO-AID COPYRIGHT 1985Z 25 FORE STREET, PRAZE,}( CAMBORNE, CORNWALL. TR14 0JX<MKF ,,: P: ,,P Z `n E$(M,),E(M,),P( ),NI$(),M$(),P$(),T$()xX:GPTR TAX$"LHPVTFD"'NI$()"ABCILMPRSTVW"=NI$()"DEFGHKNO"aB$(N," "):PAYFILE$"paydata"y, J : M$(J):6 J : P$(J): SET UP NEW DATA-FILE ADD EMPLOYEE DELETE EMPLOYEE EMPLOYEE DETAILS 'P35' LISTING" 'BLANKET' TAX CODE CHANGES> "RECORD DATA to DISC"J 'END'Y TAX CODEx WEEK/MONTH 1 BASIS (Y/N) N.I. TABLE PAY/HOUR PAY/PERIOD G.P. TO DATE TAX TO DATE N.I. (EE) (NOW) N.I. (EE) (LAST) N.I. (ER) (NOW)( N.I. (ER) (LAST)= PENSION % (EE)T PEN TO DATE (EE)i PENSION % (ER) PEN TO DATE (ER) N.I. U/B (EE) N.I. U/B (ER) SSP TO DATE G.P. PREVIOUS TAX PREVIOUS PAID TO TAX PERIOD  LEFT (Y/N) NI PAY (STD)4 NI PAY (UPPER)F SMP TO DATELRTEXT$"Micro-Aid IBM PC & COMPATIBLES PAYROLL": 'TEXT$"PERSONNEL RECORDS": '&+ 0 J : ) J;" : ";D J ;N M$(J):X Z 7]: )NE" EMPLOYEE";: NE "S";T^ ()(X)"MEMORY FREE"_P$" Enter choice to proceed, 1 to 8, or press any key to abort.": X` H: 0b *:M$Q$l M$"1" CL$""  v M$"1" M$"8" CL$"" @ ("Mm",Q$) J (M$) ,, ,,,p,X,@P V*\4>:"Press Ctrl and Break keys"H: "and re-RUN to set up new data-file"R: "or press 'N' to initialize data for a new tax year"\"or any other key to return to main menu""f *;p ("Nn",Q$) OTNE:NJ:J:` JNE  E(J,) JJ:TT:  H :E$(NJ,H)E$(J,H): H :E(NJ,H)E(J,H): H :E(NJ,H):E(NJ,):E(NJ,)E(J,)NJNJ:JJ: . H  :P(H):RNET:"INITIALIZATION COMPLETE"h: *: : n: "ENTER COMPANY NAME or just press RETURN to exit";CL$ CL$""  "No. of employees to be entered in batch ";NE$ $NE((NE$))'. NE NEM D8 J NE: :: Jb "Employee No. ",Jh "Name ";Q$:E$(J,)(Q$,) E$(J,)""  "NI Number ";E$(J,)" E$(J,)"" E$(J,)"N/K",@ H J H H H /TQ$"": P$(H);: Q$@h H Jr  NZ| F Td } H H  ("Yy",Q$) E(J,):  ("Nn",Q$) T H  0u F TE(J,)(Q$)E(J,)F !E(J,H)(Q$)? H E(J,) HEM HS_NENEw NEM NEM: JNE      : J JNE   "Employee No. "J  E$(J,) # E(J,) "Deleted from Payroll":  ; "Has already left"I E(J,)O& Y0 *c: i  "Employee number ('N' if not known) ";Q$ ("Nn",Q$)  J(Q$) T$"": "Employee name ";T$$ T$""  . J NE.BF: (E$(J,),T$) t@L F JNEHV JW`Q$(F):ot: "Found "E$(J,)u~ "Is this correct (Y/N) ?" * ("Nn",Q$)  ("Yy",Q$) FJ    J JNE  DVv  ,:P$"Enter 'Y' if printout required else press any key.": X: *: ("Yy",Q$) P% : P%|  P$" 1: Name": 2  P% E$(J,), ,"EMPLOYEE NO."(J) : E$(J,O), ,"EMPLOYEE NO."(J)!P$" 2: N.I. Number": 24! P% E$(J,); : P% E$(J,);q!Q$"(Contracted out)": E(J,) Q$"(Contracted in)"!T$(E(J,))": "Q$! P% ();"5: ";P$();" "T$!" H !,P$(H)!6 H P$(P$,)!@P$" "P$": " "JT$(E(J,H))#"T H T$E$(J,)="^ H T$(E(J,H))N"h H d"rQ$"(Cumulative)""| (T$) Q$"(Wk.1)"" P% &)P$;Q$ : P% P$;Q$" &" H P% &" H "Q$"(Contracted out)"!# E(J,) Q$"(Contracted in)"3#T$T$": "Q$=# O# H ]#Q$"Left"{# (T$) Q$"Current"#Q$"Employee "Q$# P% ," "P$;Q$# P% ," "P$;Q$# &#P$P$P$(H)# 2^$  H H P% !); "##.##";(T$): & : H H P% !); "##.##";(T$): &$ H P% !); "##";(T$); : H P% !); "##";(T$);$ H P% T$; : H P% T$<% H H P% ); "########,.##";(T$); : H P% T$% H H P% ); "########,.##";(T$); : H P% T$% H H H P% : H P% %&: P% U&D :  ,2:"A = Amend":  ,2:"L = Last":  ,2:"N = Next":  ,2:"P = Print": ,2:"R = Return";: v&ER1:C1.:R2:C2?: N&X *&b ("Pp",Q$) DV: &l ("Rr",Q$) &v ("Nn",Q$) JJ:: &{ ("Ll",Q$) JJ:: ' ("Aa",Q$) Xv' ,*: : "Amend which field (1-27)";Q$: : ,*: " Amend field ";Q$;" ": 'Q(Q$): Q Q ' Q E(J,)(E(J,)): ' Q E(J,)(E(J,)):  (P$"Enter new data": X: Q$:2( Q E$(J,Q)(Q$,): B( Q \R( Q \(  Nl( F v( ( ,.: 0u(  F (E(J,)(Q$)( E(J,)F(*E(J,)E(J,)E(J,)(4E(J, )E(J, )E(J,)(>E(J,))HE(J,))R: 0)\E(J,Q)(Q$):: 6)Q) CL$;" P35 Listing":) ,:P$"Enter 'Y' if printout required else press any key.": X: *: ("Yy",Q$) P% : P%: ,:P$"": X:) P% CL$;" P35 Listing":t* P% "No." )"Name")"Tax")"NI")"SSP")"SMP" : P% "No." )"Name")"Tax")"NI")"SSP")"SMP"* P% : P% *T1:T2:T3: J NE* P% "###";J;: ); E$(J,);: ); + P% "###";J;: ); E$(J,); +TE(J,)E(J,);+T$(T): >:T1T1Tj+ P% "#######,.##";(T$);: -);+ P% "#######,.##";(T$);: -);+TE(J,)E(J,)E(J,)E(J, )+T$(T): >:T2T2T, P% "#######,.##";(T$);: A);5, P% "#######,.##";(T$);: A);C, TE(J,)^,T$(T): >:T3T3T, P% "#######,.##";(T$),# P% "#######,.##";(T$),(: P% : P% -2 P% "Total" ); : P% "Total" );-<T$(T1): >E-F P% "#######,.##";(T$);: -);t-K P% "#######,.##";(T$);: -);-PT$(T2): >-Z P% "#######,.##";(T$);: A);-_ P% "#######,.##";(T$);: A);-dT$(T3): > .n P% "#######,.##";(T$)F.s P% "#######,.##";(T$)X.x:: *: b. h.pn.."Make no changes to codes without authority from Tax Office.".."(Form P7X)".."Suffix?"  )"ADD TO CODE"./)"L"; );: T$()+/ )"H"; );: T$()F/ )"P"; );: T$()a/ )"V"; );: T$()g/$/."Are these all correct (Y/N) ";/8 *:/B ("Nn",Q$) p/L ("Yy",Q$) 8/`:TEXT$"Data being amended": ':0j J NE: E(J,) 0t K I0~ (E$(J,),)(TAX$,K,) e0E(J,)E(J,)(T$(K))0E$(J,)((E(J,)),)(TAX$,K,)0K0 K0 J0TEXT$"Completed ": '0: *: 0 0X P0b @1@P$"Have you saved the data file? Press 'Y' if you have.": X: *Y1J ("Yy",Q$) Xh1T "selectp1' ((P(TEXT$))));TEXT$1'1*P$"Press any key to continue": X1*Q$"": Q$"": Q$:1+1.: );"D = to continue"2. )"M = return to Main Menu" 2.?22 P% P$;(P$));^22 P% P$;(P$));d22n26::2> (T$) T$"**********":2> L  (T$)2>T$" "T$2>:2 NX$"":Y$""2*N K (Q$)24NT$(Q$,K,)3>N T$( ) \N/3HN T$"0" T$"9" Y$Y$T$: \N<3RNX$X$T$B3\N\3fNF: (X$) N~3pN Y$"OT" E$(J,)"OT": N3zN Y$"BR" X$"-1":E$(J,)Y$: N3N Y$"NT" X$"2000":E$(J,)Y$: N3NF: K (TAX$)4N Y$(TAX$,K,) F4N: F <4N Y$"D" (X$)(XGPTR) Q$"":T4NX$(((X$)),)f4NE$(J,)X$Y$4N Y$"D" Y$"F" E$(J,)Y$X$4NE(J,)(X$)4N40uF4:u (Q$) bu4Du K : L (NI$(K))5Nu Q$(NI$(K),L,) FK5Xu L: K 5bu Q$"C" 65lu "Cont In/Out ?"@5vuT$Q$J5u *d5u ("Ii",Q$) Q$T$:}5u ("Oo",Q$) u5uF:Q$T$:5@5JTEXT$"LOAD DATA": '5 PAYFILE$ AS #5 #, CL$5:"LOADING ";CL$;" FILE":6& #, NE60 J  !6: #, P(J)'6D66N J NED6X K U6b #,E$(J,K)]6l Kl6v K |6 #,E(J,K)6 K,J6 #66P6ZTEXT$"SAVE DATA": '6nÍ .6xÍ *6Ë ("Mm",Q$) 6Ë ("Dd",Q$) 7É x7ú "O",#,PAYFILE$$7÷ #,CL$C7Ñ:"SAVING ";CL$;" FILE":O7÷ #,NE^7 J  l7÷ #,P(J)r7Ã7 J NE7 K  7÷ #,E$(J,K)7ă K7Ă K 7ķ #,E(J,K)7"ă K: J7,Ļ #76Ď8`:: "AN ERROR HAS BEEN FOUND AS FOLLOWS:_"::/8j "PROGRAM LINE "D8t "ERROR TYPE "J8~8 5 "FILE NOT FOUND - CHECK CORRECT DISC IS IN DRIVE A":: "THE FILES ON THE DISC ARE AS FOLLOWS:-":::: (P,"_"):9  : "PRINTER NOT ON OR CONNECTED": )9:"Press any key to continue ";@9G$: G$"" Z9:  : xb9H |9\R1:C1:R2:C2O9z IR1 R29 I,C1: ();9 I,C2: ();9 I9 JC1 C29 R1,J: ();: R2,J: (); : J#: R1,C1: ();:: R1,C2: ();Q: R2,C1: ();h: R2,C2: ();n::0TITLE.POS ( ((TEXT$)):DR1:C1:R2:C2::N :X IIR1 R2:b II,C1: ();:l II,C2: ();:v; JJC1 C2+; R1,JJ: ();B; R2,JJ: ();H;_; R1,C1: ();v; R1,C2: ();; R2,C1: ();; R2,C2: ();;;X ,: ,: (N," ");: ,: (N(P$)))P$;: ,: PAYE2 for IBM PC's V PC4.2 22.06.1988> Official from 15 JUN 1988] MICRO-AID COPYRIGHT 1985 25 FORE STREET, PRAZE, CAMBORNE, CORNWALL, TR14 0JX-MK2LLP:A%: ,,: P: ,,:4PAYFILE$"paydata"7 ,: !<P$"Micro-Aid IBM PC & COMPATIBLES PAYROLL": '>>:P$"PAYROLL RUN": 'MA  ,: rF )"Enter 'W' for Weekly Pay"H: )"Enter 'F' for Fortnightly Pay"J: )"Enter '4' for Four Weekly Pay"L: )"Enter 'M' for Monthly Pay"GNP$"Enter choice for period, W, F, 4 or M to proceed or any key to abort.": XWO H: 0aP >kZWM4[ ("4FfMmWw",G$) "selectp\ ("Ww",G$) PW^ ("Ff",G$) PW` G$"4" PWb ("Mm",G$) PW:WM dX.n C(X),R(X),K(X),N(,,),G( ),S(M,),T( )PpOT1 : OT2@ : OT3qP$"To amend overtime rates press Y otherwise 1.25, 1.5 and 2 times ": X: >: ("Yy",G$) vrP$"Enter overtime rate 1, default is 1.25 ": : T OT1TEsP$"Enter overtime rate 2, default is 1.5 ": : T OT2TtP$"Enter overtime rate 3, default is 2 ": : T OT3TvP$"Wait while NI data is loaded into tables.": XxC()dKR()R()LK()GPTR:MTC7: J : K : H : TT T H:K: fN(J,K,H)Tdr H,K,J}NU1 WM NU*NL) WM NLN1F:N2i:N3 WM N10:N2:N3BW WM BWTBNL3 E$(M,),E(M,),P( ),TAB%()AI% :Zf : I% : TAB%(I%): I%P$"Enter H for horizontal or V for vertical payslips ": X: > ("Hh",G$) PAYSLIP$"H" : PAYSLIP$"V"= PAYSLIP$"V" P$"Enter number of copies of vertical payslips ": :ZT: Z Z PAYSLIP$"H" P$"Align Micro-Aid twin NCR payslips and press ENTER to align ": : TAB%())".":P$"If period (.) is line above & just right of 'COMPANY :' press Y else ENTER": X: G$: G$ "" " @(.jP$"MICRO-AID PAYROLL FOR THE AMSTRAD PC1512": '::t rB&D$DA$0:: "Enter Tax Period Number ";WI WPW(WPW) WW: IN W WWMPW "INVALID - RE-ENTER":: : X ! ** N.I. DATA **4 C (Cont Out)g 0,0,0,0,5,7,9,10.45,0,0,0,0,1.2,3.2,5.2,6.65o  A! 5,7,9,9,5,7,9,10.45,-999% B& 3.85,3.85,3.85,3.85,5,7,9,10.45,-999* C+ 0,0,0,0,5,7,9,10.45,-999/ D#0 5,7,9,9,5,7,9,10.45,3,5,7,7,1.2,3.2,5.2,6.65+4 Ev5 3.85,3.85,3.85,3.85,5,7,9,10.45,3.85,3.85,3.85,3.85,1.2,3.2,5.2,6.65~9 F: 4.75,6.75,8.75,8.75,4.85,6.85,8.85,10.3; 2.6,4.6,6.6,6.6,.75,2.75,4.75,6.2> G(? 3.6,3.6,3.6,3.6,4.85,6.85,8.85,10.3,3.6,3.6,3.6,3.6,.75,2.75,4.75,6.20C H]D 4.75,6.75,8.75,8.75,4.35,6.35,8.35,9.8E 2.6,4.6,6.6,6.6,.25,2.25,4.25,5.7H II 4.75,6.75,8.75,8.75,4.35,6.35,8.35,9.8,-999M J (not used)N -999R K0S 3.6,3.6,3.6,3.6,4.35,6.35,8.35,9.8,3.6,3.6,3.6,3.6,.25,2.25,4.25,5.78W LkX 4.75,6.75,8.75,8.75,4.85,6.85,8.85,10.3,-999s\ M] 3.6,3.6,3.6,3.6,4.85,6.85,8.85,10.3,-999a Nb 5,7,9,9,4.5,6.5,8.5,9.95,2.85,4.85,6.85,6.85,.4,2.4,4.4,5.85f O g 3.85,3.85,3.85,3.85,4.5,6.5,8.5,9.95Jh 3.85,3.85,3.85,3.85,.4,2.4,4.4,5.85Rk Pl 3.6,3.6,3.6,3.6,4.35,6.35,8.35,9.8,-999p Q (not used)q -999u Rv 5,7,9,9,4.5,6.5,8.5,9.95,-999z S{ 0,0,0,0,4.85,6.85,8.85,10.3,-999  T1  3.85,3.85,3.85,3.85,4.5,6.5,8.5,9.95,-999D  U (not used)O  -999W  V}  0,0,0,0,4.35,6.35,8.35,9.8,-999  W  0,0,0,0,4.5,6.5,8.5,9.95,-999  X (not used)  -999  Y (not used)  -999  Z (not used)! -999 ! 0,20,22,28,38,49,60,72C! J% NE: E(J%,) X n!PRTAX$"BONUS/ADJ":POTAX$"ADJUSTMENT"x!HRS! K%  !G(K%)! K%:NW!$: !. E$(J%,);!8 )"Period";!B N;<)"Record No. ";J% "L "Paid to Period ";E(J%,)"V: /"` E(J%,)N H"t "0: PAY AS NORMAL"N"~" "1: HOURS (SINGLE TIME)",: "#####,.##"; G()" "2: HOURS ("OT1"x TIME)",: "#####,.##"; G()" "3: HOURS ("OT2"x TIME)",: "#####,.##"; G()"# "4: HOURS ("OT3"x TIME)",: "#####,.##"; G()K# "5: S.S.P.",,: "#####,.##"; G()u# "M: S.M.P.",,: "#####,.##"; G( )# "6: OTHER SICK PAY",: "#####,.##"; G()# "7: HOLIDAY PAY",: "#####,.##"; G()$ "8: PRE-TAX ADJUSTMENT",: "#####,.##"; G();$ "9: POST-TAX ADJUSTMENT",: "#####,.##"; G()d$TOT: K%  :TOTTOTG(K%): K%l$ $: "C: COMPLETE",: : " TOTAL ########,.##"; TOT: $$ "X: SKIP (NO PAY : NO REFUND)"$%  "W: ADVANCE PERIOD NUMBER"%%: :"FREE MEMORY ";(""): s%P$"Enter pay type and hours or pay amount (0-9 & M) or C, X or W ": X% ,: *: ,% Q$"0" TE(J%,): ::G()T: %# ("Mm",Q$) %( ("Cc",Q$) %2 ("Xx",Q$) X &< ("Ww",Q$)  1&FQ(Q$): Q Q ;&T$""Z& ("Mm",Q$)  : $& Q 4,,,` , ,( , , ,T & $&4P$"HOURS (STANDARD TIME) ": &>TTE(J%,)&H :&RG()T&\'P$"HOURS ("(OT1)" x TIME) ": "'TTOT1E(J%,),' :7'G()T='h'P$"HOURS ("(OT2)" x TIME) ": |' TTOT2E(J%,)' :' G()T'$ '` P$"HOURS ("(OT3)" x TIME) ": 'j TTOT3E(J%,)'t :'~ G()T' ( P$"ENTER AMOUNT of S.S.P. ": "( :-( G()T3( Z( P$"ENTER AMOUNT of S.M.P. ": d( :p( G( )Tv( (( P$"ENTER SICK PAY (HOURS) ": (2 TTE(J%,)(< :(F G()T(P ( P$"ENTER HOLIDAY PAY (HOURS) ": ) TTE(J%,) ) :) G()T) f) P$"PRE-TAX ADJUSTMENT - USE 'MINUS' IF A DEDUCTION - AMOUNT ": p) :{)" G()T)$ P$"Enter reason max 10 characters ": X: PRTAX$), *T P$"POST-TAX ADJUSTMENT - USE 'MINUS' IF A DEDUCTION - AMOUNT ":  *| :* G()TP* P$"Enter reason max 10 characters ": X: POTAX$V* r* NNPW: NWMPW NPW|* $** K% :G()G()G(K%): K%*G()G()G( )*G()(G()d\)d*AVG()PW*UE:UR+PE:PR+NI:ER+PN:PU1+ AVNL pM+AB((AVTB)BW)BWTBn+PNABPW: AVNU PNNUPWw+AG+ (ABNL) (ABBWNL) AGNL+ (ABN1) (ABBWN1) AGN1+ (ABN2) (ABBWN2) AGN2, (ABN3) (ABBWN3) AGN3+,  (ABNU) (ABBWNU) AGNUG, AG AAABBW: 2k, AVAG AAABBW:ABAG: 2u,(AAAG,2AG(((AAAB))d)d,< AVNL AGNL,F AVNU AGNU,PNP,Z AVN1 NP,d AVN2 NP-n AVN3 NP-xBE(J%,)@(- E(J%,) 5-PNNLPWE- B BR-AGAGNL{-UE((AGN(B,,NP)dHz)d)PW-UR((AGN(B,,NP)dHz)d)PW-PE((AVE(J%, )Hz)d)PW-PR((AVE(J%, )Hz)d)PW-AGNL#.PU(ABNL)PW: AVNU PU(NUNL)PWL.NI((AGN(B,,NP)dHz)d)PWu."ER((AGN(B,,NP)dHz)d)PW., AVNU ERER((((AVNU)N(B,,))d)d)PW.JNINIUE.TERERUR.p (E$(J%,),)"D" /z (E$(J%,),)"F" / NWM E(J%,)@/TE(J%,): TMTC d: J/ j/GTG()E(J%,)E(J%, )PE/ E(J%,) GTG()PE/ NWM E(J%,) GTFM TA: B/ NWM GTG()PE/NNNWM/ E(J%,) NWM NNPWWM0 FGT TA: B00TP((GTF)dQs)dU0 TP(C()NN) T h0TA(TP)R()0 T TA(TP)R(GPTR)0 80B0TA(((C(B)NN ) )(TP))0$TATAR(B)0.TATA((K(B)NN ) ) 18TA(TAd)dD1B E(J%,) NWM TA((TAE(J%,))d)dN1L bs1TA(G()PE)R(GPTRE(J%,))}1 81TPG()PE1  E(J%,) NWMPW TPTPE(J%,)E(J%, )1TP(TP)1TATP((E(J%,))d)1( 82dL(TMTC) 2iT()(TL):T().2n K LK2sT(K)T():T()T()T(K)S2x Kf2} T()T u2 K% L2T(K%)T(K%):T()T()2 T()T K%L2 K%2 K%L 2T(): K% L2TT(K%): :T()T()F3 K%3FFT()#3T(): K LA3TT(K): :T()T()FMI3 K\3FMT():FFF:3NNN: E(J%,) NWM NNPW3FNN((((T )WM ) 3"z)d)d3FMWM((((T )WM ) 3"z)d)d4 T F:FM44X PRINT PAYSLIP 4b<4lDA$D$: NW hB:\4v H Z:DV: H DV4{ H PAYSLIP$"H" Hq: t4 DV 4: DV Q$CL$: : P% : DV P% 4Q$"NAME "E$(J%,): 5 DV %5Q$"PAY No. "(J%): G5Q$"NI No. "E$(J%,): i5Q$"TAX CODE "E$(J%,): }5 P% : 5Q$"PERIOD No. "(N): ,5Q$" : DATE - "DA$: 5 d5Q$"PAY (NORMAL TIME)":R:TG(): PF(6Q$"OVERTIME (1) "(OT1):R:TG(): PFX6Q$"OVERTIME (2) "(OT2):R:TG(): PF6 Q$"OVERTIME (3) "(OT3):R:TG(): PF6Q$"S.S.P.":R:TG(): PF6Q$"S.M.P.":R:TG( ): PF6 Q$"SICK PAY":R:TG(): PF7*Q$"HOLIDAY PAY":R:TG(): PF974Q$"BONUS/ADJ.":R:TG(): PFC7> dg7HQ$"GROSS PAY":R:TG(): PFq7R d7\Q$"TAX":R:TTA: PF7fQ$"N.I.":R:TNI: PF7pQ$"PENSION":RE(J%,):TPE: PF7zQ$"ADJUSTMENT":R:TG(): PF8 d8Q$"TOTAL DEDUCTIONS":RF8TNIPETAG(): PF:PAG()T: P8 dt8Q$"NET PAYABLE":R:TPA: PF8 DV 8 P% : 8Q$"N.I. (ER)":R:TER: PF8Q$"PENSION (ER)":RE(J%,):TPR: PF9Q$"GROSS TO DATE":R:TG()E(J%,): PFC9Q$"TAX TO DATE":R:TTAE(J%,): PFr9Q$"N.I. UPPER (EE)":RE(J%,):TUE: PF9Q$"N.I. UPPER (ER)":RE(J%,):TUR: PF9Q$"UPPER TO DATE (EE)":RE(J%,):TUEE(J%,): PF:Q$"UPPER TO DATE (ER)":RE(J%,):TURE(J%,): PF@:Q$"PAY FOR NI (STD)":R:TPN: PFr:Q$"PAY FOR NI (UPPER)":RE(J%,):TPU: PF: d:Q$"": :P%:$ DV *: t:.P$"Press 'C' to CANCEL, 'P' to PRINT or 'R' to RECORD ONLY": X:B *;L ("Cc",Q$) HZ: t1;V ("Pp",Q$) tN;` ("Rr",Q$) HZ: tX;j Bn;t H: HZ ;@E(J%,)E(J%,)G();EE(,)E(,)G();JE(J%,)E(J%,)TA;OE(,)E(,)TA;TE(J%,)E(J%,)NI;YE(,)E(,)NI <^E(J%,)E(J%,)ER"S(J%,)S(J%,)NIER>S(J%,)S(J%,)PEPR>>S(J%,)S(J%,)G()G( )U>S(J%,)S(J%,)PA> P$"Press S for same employee - Press SPACE BAR for next employee": X>: *>D ("Ss",Q$) >N Q$" " : >X J%?l J NE: K :S(,K)S(,K)S(J,K): K,J)?v P()P()E(,)>? P()P()E(,)T? P()P()E(,)j? P()P()E(,)? P()P()E(,)? P()P()E(,)? P()P()E(,)? P()P()E(,)? P()P()E(, )? P( )P( )E(,)@ P()P()P()L@H! PAYSLIP$"H" P$"Change payslip paper for plain paper ": X: G$@R!P$"Press SPACE for Current Period Summary": X@\! *@f! Q$" " \!@p! @z!: P% CL$: : P% CL$:A!Q$"CURRENT PERIOD SUMMARY - TAX PERIOD"(W)" - P/E "D$: 0A! P% ::REA! P% ::RgA!Q$"GROSS PAY":TE(,): PFA! P% : P% A!Q$"TAX":TE(,): PFA!Q$"N.I.":TE(,)E(,): PFA!Q$"S.S.P.":TE(,): PFB!Q$"S.M.P.":TE(,): PF!B! P% : P% @B!Q$"TOTAL PAYABLE TO I.R."qB!TE(,)E(,)E(,)E(,)E(,): PFB! P% : P% B!Q$"N.I. (EES)":TE(,): PFB!Q$"N.I. (ER)":TE(,): PFB"Q$"PENSION (EE)":TE(, ): PFC"Q$"PENSION (ER)":TE(,): PFEC"Q$"NI PAY (STD)":TE(,): PFmC"Q$"NI PAY (UPPER)":TE(,): PF|C" d:P%C8"P$"Press R to repeat or SPACE BAR for EMPLOYEE SUMMARY": XCV" *C`" ("Rr",Q$) p!Cj" Q$" " V"Ct" (D~": P% :: CL$: : :: CL$:hD"Q$"EMPLOYEE SUMMARY - TAX PERIOD"(W)" - P/E "D$: D" P% : : :D"Q$"NAME" (," ") "......GROSS......TAX...NI (TOT).PEN (TOT)......SSP*...PAYABLE": D" J NEE" E(J,) "2E"Q$E$(J,)((E$(J,))," "): ,@E" H eE" P% "#######.##";S(J,H);E" P% "#######.##";S(J,H);E" H: P% : P% E" JE" P% : P% E#Q$"TOTAL"(," "): ,E # H "F# P% "#######.##";S(,H);GF# P% "#######.##";S(,H);OF# H|F##Q$"": :Q$"* Includes S.M.P.": F(#Q$(P,"-"): :P%F<#P$"Press R to repeat, P for Cumulative Period Summary or SPACE to record data": XFx# *G# ("Rr",Q$) t"&G# Q$" " %?G# ("Pp",Q$) x#YG# : P% : jG#Q$CL$: ~G# P% : G#Q$"CUMULATIVE PERIOD SUMMARY - PERIOD ENDING "D$: G# P% : : P% :G#Q$"GROSS PAY":TP(): PFH#Q$"TAX":TP(): PF1H#Q$"N.I.":TP(): PFKH#Q$"SSP":TP(): PFeH#Q$"SMP":TP(): PFH#Q$"TOTAL TO I.R.":T(P()P())(P()P()): PFH#Q$"N.I. (EE)":TP(): PFH$Q$"N.I. (ER)":TP(): PFI$Q$"N.I. U.B. (ER)":TP(): PF$I"$Q$"PENSION (EE)":TP(): PFHI,$Q$"PENSION (ER)":TP( ): PFWI6$ d:P%aIT$ *I^$P$"Press R to repeat, SPACE to record data or C to re-set Period Summary": XI$ *I$ ("Rr",Q$) x#I$ ("Cc",Q$) $J$ Q$" " $J$ J  J$P(J)$J$ J.J% P8J!%  NJ0%P$"Press R to Record Back-up copy on separate disc or SPACE to end.": XJN% *JX% ("Rr",Q$) P: 0%Jb% Q$" " N%J%J%J% "selectpJ' LL((P$)))P$K'+K*P$"Press any key to continue": X:NK* "? ";:Q$"": Q$"":Q$:TK+K.P$"Press 'D' to continue to SAVE data - 'M' not to SAVE": X:K6K6:K6K:T(Td)dK:K>G$""K> G$""K>G$K> G$"" >L> L>+LhB: )"Enter Tax Period "NLrB ::" Current date is ";;" (MM.DD.YY). If OK press 'Y' else any key. ";: *: ("Yy",Q$) DA$: BL|B::"DD.MM.YY ";DA$: (DA$) |BLBLPF R T LZF :MdF P% Q$;: );"#######,.##";TGMiF P% Q$;: );"#######,.##";TMMnFaM8J R T kMBJ :MLJ TAB%);"#####.##";T;MVJM NX :GT:N: 4NM*N C$(X),CC(X),TT(X),GG(X)M4N #20,#10,#5,#1,50p,20p,10p,5p,2p,1pN>N 20,10,5,1,.5,.2,.1,.05,.02,.01)NHN J X: C$(J):ANRN J X: CC(J):GN\N}NzNP$"MICRO-AID PC1512 PAYROLL COIN ANALYSIS": 'NN NN:Q$P$" for "CL$: :NNTB: J% X:Q$C$(J%): :TBTB: J%: P% : NN J NE ON E(J,) O"ON S(J,) O,ONNN>ONP$(S(J,))FONF^ONP: J% (P$)qONT$(P$,J%,)ON T$"." NON T$"0" T$"9" FON OONPPOO P (P$,J%)) FOO J%OOP(P$)QsO$OPNPP.OGTGTPP8O J% X!PBOPP'p4PLOA(PCC(J%))EPVOPPACC(J%)RP`OTT(J%)AfPjOGG(J%)GG(J%)AoPtO J%POQ$(J): ,POTBPO J% XPOATT(J%):TACC(J%)Qs: 2PPOTBTBPO J%POQ$"": PO JQOQ$(P,"-"): : P% : ]QOQ$"TOTAL CASH REQUIRED FOR"(N)" PAYSLIPS": : P% : fQOTBuQO J% XQPQ$C$(J%):AGG(J%):TACC(J%)Qs: 2PQPTBTBQ P J%QPQ$"": QPQ$"Total":T(GTd)d: PFQ(P:: R2PQ$(A): RPP&RHqTAB%(TAB%())rRRq TAB%)CL$ TAB%()@)"EMPLOYEE No.";J%;TAB%())"NI No. "E$(J%,)|RWq::R\q TAB%())"BASIC PAY "HRS;TAB%())"x" E(J%,);:TAB%TAB%():TG(): 8JRfq TAB%())"TAX";:TAB%TAB%():TTA: 8J/Spq TAB%())"NI (ER)";:TAB%TAB%():TER: 8J:Szq TAB%())"OVERTIME"OT1 TAB%())"x"; OT1E(J%,);:TAB%TAB%():TG(): 8JSq TAB%())"NI";:TAB%TAB%():TNI: 8JSq PR TAB%())"PENS. ER";:TAB%TAB%():TPR: 8J : ETq TAB%())"OVERTIME"OT2 TAB%())"x"; OT2E(J%,);:TAB%TAB%():TG(): 8JwTq TAB%())"PENSION";:TAB%TAB%():TPE: 8JTq TAB%())"GROSS TD";:TAB%TAB%():TG()E(J%,): 8J: Uq TAB%())"OVERTIME"OT3 TAB%())"x"; OT3E(J%,);:TAB%TAB%():TG(): 8J;Uq TAB%())POTAX$;:TAB%TAB%():TG(): 8JvUq TAB%())"TAX TD";:TAB%TAB%():TTAE(J%,): 8J:Uq TAB%())"S.S.P.";:TAB%TAB%():TG(): 8JUq TAB%())"NI PAY STD";:TAB%TAB%():TPN: 8J:Vq TAB%())"S.M.P.";:TAB%TAB%():TG( ): 8JKVq TAB%())"NI PAY UPP";:TAB%TAB%():TPU: 8J:Vq TAB%())"SICK PAY";:TAB%TAB%():TG(): 8JVq UE TAB%())"NI UPR EE";:TAB%TAB%():TUE: 8J: : Vq TAB%())"HOLIDAY PAY";:TAB%TAB%():TG(): 8J@Wq UR TAB%())"NI UPR ER";:TAB%TAB%():TUR: 8J: : qWr TAB%())PRTAX$;:TAB%TAB%():TG(): 8JWr (UEE(J%,)) TAB%())"UPP TD EE";:TAB%TAB%():TUEE(J%,): K: : Xr (URE(J%,)) TAB%())"UPP TD ER"TAB%())URE(J%,) : GX$r TAB%())"GROSS PAY";:TAB%TAB%():TG(): 8JX.rTNIPETAG(): TAB%())"DEDUCTIONS";:TAB%TAB%(): 8J:PAG()T:X3r::Y8r TAB%())DA$ TAB%()) E$(J%,) TAB%());N; TAB%()) E$(J%,);:TAB%TAB%():TPA: 8J:YLr::::YVrY@8YJTEXT$"LOAD DATA": 'QY PAYFILE$ AS #_Y #, CL$YP$"LOADING "CL$" FILE": XY& #, NEY0 J  Y: #, P(J)YDYN J NEYX K Yb #,E$(J,K)Yl KYv K  Z #,E(J,K)Z K,JZ #"Z(ZPDZZTEXT$"SAVE DATA": 'NZnÍ .XZxÍ *mZË ("Mm",Q$) ZË ("Dd",Q$) ZÉ xZú "O",#,PAYFILE$Z÷ #,CL$ZÑ:"SAVING ";CL$;" FILE":Z÷ #,NEZ J  Z÷ #,P(J)ZÃ[ J NE[ K  .[÷ #,E$(J,K)6[ă KE[Ă K U[ķ #,E(J,K)b["ă K: Jk[,Ļ #q[6Ď[`:: "AN ERROR HAS BEEN FOUND AS FOLLOWS:_"::[j "PROGRAM LINE "[t "ERROR TYPE "[~\\ 5 "FILE NOT FOUND - CHECK CORRECT DISC IS IN DRIVE A":: "THE FILES ON THE DISC ARE AS FOLLOWS:-":::: (P,"_"):\  "PRINTER NOT ON OR CONNECTED"\:"Press any key to continue ";\G$: G$"" \: x\H \\R1:C1:R2:C2O ]z I R1 R2] I,C1: ();5] I,C2: ();=] IS] J C1 C2i] R1,J: ();] R2,J: ();] J] R1,C1: ();] R1,C2: ();] R2,C1: ();] R2,C2: ();] ^0TITLE.POS(((TEXT$))%^DR1:C1:R2:C28-^N B^X IIR1 R2Y^b II,C1: ();p^l II,C2: ();v^v^ JJC1 C2^ R1,JJ: ();^ R2,JJ: ();^^ R1,C1: ();^ R1,C2: ();_ R2,C1: ();_ R2,C2: ();!__P$"Enter 'Y' if paper printout required else press any key ": X: *: ("Yy",Q$) P% : P%_ _d P% ((,"-") : ((,"-")_n_ P% Q$ : Q$__, P% Q$; : Q$;`6'` P% TB);Q$; : TB);Q$;-`k` P% TB);"####";(Q$); : TB);"####";(Q$);q``X ,: ,: (N," ");: ,: (N(P$)))P$;: ,:P$"":a ,: ,: (N," ");: ,: (N(P$)))P$;:P$"": T: ,:e.>9_u p>Eu Pʋ£P3Ҏڣ0[؎Ћ&,Ȏ'J!r%)G0Ƈ3?tx O Q < u .C u Bytes free @ 3ء;u:Ht>u hu !  д3!3&&&&ln.p.r$&$&$&prl2n.$. "Ü...^VLVVUˏL^VLVU@Jj?NlL??KswNdLBLLH,m/1}@@@`@d@h@UVWzHAIΌVVVOMMO΋O͐IRCLőHDIҗATERAגRDE֕NVIROΛIELĂILEӁEԉOCT̖IL̇SEԅKIKSKDKDIҘAMńUԈAINԏLAٓMAОSEԆESEԊMDIҙYSTE̓HEL̚IMEIMEҔIEלINDOםϊ$ EMDCA+^_C,Q^VR.ËÉËËDevice UnavailableCommunication buffer overflowDisk Write ProtectedDisk not ReadyDisk Media ErrorAdvanced FeatureRename across disksPath/File access errorPath not found ^^dϊ݋% Āu-0A:.0 &-0X+P0!X t5<t.< t'< t Āu <t#<t"<t JDFGHIKLDs^^MrhC(. uuGt>u>uσt8FF__usSQPx.CCKKvXPXS34E5 w.uj%n2]ZXxY[>uπ>OtϠ)^_ZRWVPKtXPRS[ZRd9ZXs^_XY^WVԋƄ.ٿWVz9^_^WVLu >u-sS6<u>@t +v r:u+ȋފX2P ^_XS!^_[ ^WVr^_Xt,, u R2e$ 6uR72P6r^_XQKu `7o,&oiDdc"]"W QK+Ex,?993:-'!d5$- (g Y,n7&O&g8L&q,@ttfc cSlArte6cy}s^{mTgTaU[/UOI'C0=d71p+%' .[He Pe% eg"kdR$&iAZCFF cIYDE>=>MA e$$&*8,nI" 5&, ? )???,UV-7-- 8b - >u u2^VQYZQQu9>u>t*>t#>66 t ;t23tπ>uS.tuwr>^t [__[,;W^VQ]uZ;\u\]uw^VuxS>t3>u>u>u 4s uK< t6 tC3r < t6!^_^WV쁾3uWuW&Z:&)t Ĉ&W >u0>t6PX32Ĉ&W>u< uS.[u<t>XtPRд!Z< u XPSQR4ZY[XS3ۊH.'I[Q<,t !YQHt\P<t*(uŀu(t ŀt ŀuɈ&)HHI:tKģM&OtODJSt > t@y'>)(tO>O>ISXt 5 HI=t 0> u0#[Ã>u>jtSk?[uj6]1rSPTX}V$R(Q u6R?,t u C'u)XSPYs+C[SK>XtFXÀ>Xs:XsPAsK tGZÀ r=Ys63ɀAs/ ts&s!Xs tA\t,PQ\t u@YX\3 uË-%fuD3O& &"@eu Ca 6Bfe[]uSju[>fte|7w7r7m72PK <@tft fug&guZXϺ ZXVSQjt0BfeLVSQehjQ1>eu*a$3؋ "@f>]t%j>\r:^s `tY[^3؎>_t0`u*`Sduyact[>4t >EtQVWSQ t :.<?62t, &6t$7.9=t 9t5Y[_^SQ?u QYCCY[S tt2[R"ȘZSQEYȀu:sԊKQ/ t[s XSC[^[^V(P)X(SOX[{) tsQr tñYS6.QPQ;ЁSR,SrC7[_->qt,r<s2P,S3 tsC7t$ot [^ t <sm:PqXS]tj>\r[K,_t`adcf22i<(uGS<sAPX[?u 2侉$#?uSP#Xu E["^WK4P>Et<sSt s Ƈ[t QRKt,<,trCQZRS}[ZYSs$tSZڇӰ@ . $ [ ,u +,$? S2[$VtRsZrt tKKrV4$  PXqTڇTMOmRT+t;rVt2 tӋMO.V8KKrCSKuZV47P Q  uàV . RRT ۊQSPMOX[MOPÀ> t\ u > tC : r2È > t&  S ^ :u À> tRڊ ¶+sڈ Z2   NKtH,<,t@u5S3Ɋ tɀ@s A>  [pS@r> t)KVt$-,4>uSk tɋ [  À> t9 6  @V:uu 2^Fu;u6 S\R/+=sZ/+= s \[õ>t.4حȭЉ6RQS9s XXX>P;/Xr\ 2,9S砥 y}>5 t _ [Sډ715B2HF[r R^V2;sH t4tHӢG@>[KuS:!,SZuF绦JD87A(uR(rRSCBAZ[;r[Çڋˋ8CڊrRӋK+IZ8BR[>FtÉ:S<I[SKZ"SRB<:+ډ:IۉIZ[ڰPSRSR<Bډ<:ڇӋ@;t s >;t s)>Gu-'H"t" H"t0ZYUC>GtZ[ZY@ sZ[Xt6RIډIZSKډK[e=7;9 =;ËD u u2Kt,<,tQ^VSY y $H"~)u66BkYZiZùtâP9X uvQR=ZYS+ s. C s. C [SRQRu˺QYZڇ[;sh[CCCC sSk [RKt,ӻ,*.:t KuZÇ͊^VPCCRSztK7r[CCRS9Js["ZYXRHZR>u d ZJu[S s[^,9u9SRҶCY[8*2rll*n*s*u*M*ł*~*Lj*|*+T+BM+NI+X<+ӑ+PT+ڹ?ڋʺ6ڋ0*ڋ<+t<-R<,tY3۝uoRZ3>vu>t@RQtZR66xsYZ~Z[QPStcZ66|TYZ_ZZsA&sBP*[rr PSQR ZY[Xr ;=rð@rK2   R<,tPX r r =;Y2ss tqàq uûuӊsJsBsÊ rssZMtΊ u Ku)<Ȝu3ɋ5 uBS K7 1؋ ;; !؋ +? ؋ C [S  P   -P@   '  s! ( 3ɡ > u +PQ߻O YX@ȉ=3ҡ > u  +PQRm߻S SZYX@Љ;? ׻7 -߻G /׻O |߻_ ׻C ֻ; a߻K ׻S X߻c ֻG ֻO C߻W ֻK ֻS .߻[ [àL 7 9  \5 ubKtY<Ȝuۺ7 \? RS7 ]ֻ? ot2s7 -; DֻC Vts; [u6 5 S<[Rz(S=^[SV"[Kc,jS&^[V [KqJ)Ê<@ucڹ5 uR,)Ya66,)Su!k S[[Sg S[k ~[Sg lSY[t  >5 t >6 u+ =t=7ȡ;t£;9fS"[vO(VSݻ1 [K`9,8PKT-)XS<r~.W1[eל1_1111 k Ի; ܻc :>5 t>6 u > t +Ëأû1 g SԻ7 eܻ_ Dvû1 Jlܡ 7 W '1 6X܀>5 t>6 u +Ëء ; [ QR> u+#[F[N2PXSs[NS&(-KB<)u_X:Sۃs݊Ë= t-; t!>5 uݻg tk [(ր> t > u+[VZSP69676;6=mSs طZ=;79X[R[հQRKt `,<,t[يSQs[ZYl׋7+sË9+P99XPQ7^P67YXQRZYth,<,tSBt}<,tlFSo[s=S2,sCSsCS7ZYRQYPS[XUYZIu[^QRS^=7;9[ZY;S9SR[9[97Q[7[RQ?,ىYZtsRSӻt6s6^S;s[[6^Sމ[6ډ[ZSNZRYAs;r+À>Uu r s˟ r sӞR7;}) + ZR9;}- / Zá) ; | ;+ |- ; | ;/ |> tPuL uċ r r rs  w>QR79ZY29 ~@9 }@@9 ~ 9 } PS+ً7+ً΋9+™RX x@ƋYX676979ËÉá3 u ; sá r á3 u ; rá r-À ÊUrÊUrÌƿNj&"ŠUrÌƿNj&2"&0ËꟋڱӱs ՊUt"Ȱð"ɰH<ts<rU?3U3U<r$Ut $آUÌƿNj tl&/ЊU"" Jt@s&/&Uu>>뛋&/&û3UtCùUUU>UtàUÉ؟2r>s 2.X8y8n8b8d88&2"&0G & G"&G"&0Gـt2&GJx1u"܋&GMx2 ÈF"Ċ$Ѵt"Ċ2 tP tLFG_t=Mut*ʸԊ"  t6Àt2 Ê&Nj>632Ê.W.Ê2"t 2" 2ÊUs &=&=r ;># u8.' ÊUs &=&=9>% u:.( ÿNj>.W62&=PR r 3QPYr С £# ! £% ZXE^rErr&=>.ˋw&rMtPs3U2>M.OU3s E1s>.Z&=ˋÉoSRP\ӊ t tQPXn[ ul^tȋo.u:tCCC:Q.s( ؊QS)urM3 [YC.tSn tlCl< t<`r, [SnlKl[<=tk<+t<-u)P t9Xr90sVSb[D^ϋ\XZ+£N/`I/>ftigΉZ\͋0Kke,ʡA\2ke>XNǣZ6/F`/+AO>\3΋0Kl t rI3PFX<F3Ë\QA+Oǣ\Y+st<u3ɋ?,u+VWQkRAS;XY_^;rSڈ[vRY^SVQ̊/^S QV u [;0rG;XsA3\;/r[YZSu Q= Y^SQS([Y^SRQYZ^SQSC[C?Y[C7:s*͝Պr [s  ðPXˋ-YΰP&X:r0Cö2xs~dtCX262ˀ>kt>tYKwtCrtt ċ6!ˉ;̰>ʰS0XK+M[Ss9P#[SZ+PCJuNJBS^s%`tP[SڈCYKRtV)^ t;;vʉ=ZMˊR!uZQRZYQ;r u tS.BDŽAS>u[ƊPGW*3 t 3󪉄 _XP<u<u3ɴ!=!s5<uX<uP<t<t<t<t< tD̉2W!2D! "u XP 一t;3ɋѰB!rY t73Irt uR;á=ȍ3-s3 P? Xt3tƄ2<u"u t>!3^_[[^8 t uȋـ. r^Vʠ t5?t4<u2&t m t ;t23uN<'u K4C8Ɉ.LJ^ ăSP;w;~X[Ë6<u<tI! Ƅ!u'S ;s*3<uC [ [<t*&uur<uDŽ) ^_XYZ[^WVˋ6<u<t>S <u ;tˈ3)C <t ;|O[< uƄ2< 2â:i<u. r:PSް kɀ?,u:VmS)2Ȋ[QKwY^u2S:u#%r u t#%PڋrȋщDŽƄ)Ƅ*%Xt s%[#RQʋЋ2B!sYZQW'P33<u?YR ͈&<t )*_YDŽ PQƄ)'@ YXt>!]DŽ SR3<u!r+Z[þPRVG=u!WPt;t uX_y^ZXS63Ҹ[RSSV;/r\[ZYIS?![7S6Ӌ@![;CfS3Ɋ[US&!R*?:t:u:t2ZO= tG "N;r8tAF+=@s[[QRWV@r :u$,@r<sѪ^:u+ )I< r<.t Ju_ZYÝ trtܰ J JuSRV< t<=t+tIt< tu<;tN_Q ʋ֋Wt,Qt Y_<=uX&%+ W؎^u^XY t&;%r؎%< t =II< t3؎[Y_*$()St2 tdtJtbsQSŽ#^YZV㡬< t<=t_R$Y֋tWQt Y_<=uXX #33<tFA u s<$t+e-鈾 S˾t+[S>:u _@u:u FF*.DŽ* u!R*yG!r!@:"y tV^Jºw!N!s.3{:J>u4J蓶B&):s Vg^ 1uBO!<utZ6!㿟«3:-[ð 84t8tV^t(P,XSPP[D!r[< t#V鼻޾跾$賾(}tQ詾)^SD!rpY7Sހ:uCCSSR[!3ɴN!s<ug_Wy A!s <u_FO!s^[ô;9:PXS!s<t[-6k7s<tqȿyݽAٽSsͺyV!s/<tѺ>uS3=!rش>!3<t[COMSPEC忹t sS GOG!C  Ȏt֋LtuX؎H隿<=u.6LX؎N\/+=rր>?u6W,6/+Q++SDZ@،،+؎J![Sq.Lq-衿[#ثɸN 3д3!.L#.&L.L2K!.&L.L.L3آ2Ҵ3!%Ў؎(.Lq衽>?u&Ȏ)J!r0Y^>,+ċ+.Ls <t <t[SN7Can't continue after SHELL uSN!P !Xд![u7޲艾2L!OO O GPF;u ËF;u É LJX[^6CVXĞYZ[Z[Y^u.G@t26&ECZ3Ã.ñi衼;t*LP1Tdžģ=!s <t9鵷2Ë/Ê.btTc tRAt>!XPă' PSFc tR< t< rS[t 8r t[XăubTRQSP633@!sƾXP< u<u/t X[YZ>ùPSSOTTTTT TyUSGt飼R3JJ  ƇƇLJQurYQrurƇZ h[u 6=赹NurVZ^[ XZ_ϲVVGVFV2$tG u<tK;t }식GƇËGuOtJJ6Ƅ ËG숇ttt t t uÀtƇJ$ t 5| Ƅ}&l.F}k +}+''c}jr$I~L~z# q}#cyK~vsc|1CeむtG鵚 ʀeQҬ?wp>[3l_DNn"I,\zwpLDPLB!XVC0`[Z*2g')8n tz~@\);8h!I,k e35TeB׳] j0 J]\ZkZ\\Zrπt>uXXP.NX<t__>u薵>u 66}6XVLX<t!>t)e:3 B"R^WV˿W....þ þZPPPP⿫ZXXXX& oWW裳 oWWt蕳þe蒳tjM膳É6u6x.PVK^*XuPV^V^ t uÀ6^ր6tKyu_Otvy6lW`_drty]tۻJ!J!Ў-b=rбHHؾo 3ȎؾP,&#3 u u%H٣%$)'6ģ,- f^Zz._qأP3Ҏڣ&&&&lnp.r.荡37!\/t/!0.@ H(<r P<u h&)&*?Eͪ,:3(; zމ633 u63%t:!tK"3C t:!t < uܩ?u+.>9_u >Eus3KKӱC'[+Ërr+s霩 £,/E; r>u>u 3?tq|u>].>8_t^QS. tg[Y 0+KK]Xܦ赦:3<,t蜨3D!€t"2 .s÷F.]\hjˁQLJˋh с€j[WPUVS3puYbuKTu=V!U u uEÃ>Et S u[.DŽQ.DŽ^þ3؃<B2Y6EGK΁ OQOLJKӉ GƇƇ ։3>u .02 .,.!"[3jzȫؾe t2ȫ3ȎؾfNSw;x / [ Cߘ܆ oAA" [EoDD݄l: @ W c?mXXJ!brb؎@nXXX_2 ~ke]/t 6D. .5_-.HP/5-X".SC._....6X9""=0=]=?$$@RClAmAA/SR&]F3F)X XGGQ*PTh)))e~}pxz sbyzz+=z(&)( )"G) &&ukQkkeUVWDDD7HWPbm#:CMeijUTϪNBTSSAVLOAEEOLOҿLOSŻONԙLEAҒSRLIINSNDBO HRAL̳LELETũATI͆EFSTҬEFINԭEFSNǮEFDB̯EƗLSšNāRASťDIԦRROҧRRX O#QO҂RIOTωO TωOSUEXNPUԅƋNSTNNMNKEYEOCATPRINԝLISԞPOEԈINŰOAļISԓO O$EEFTO%OTOERGŽOIDEXԃEהOPEκUԜΕCTPTIOθFRINԑOKŘOEESERESEOINE UΊETURΎEAćESTORŌE͏ESUMŨIGHTNENUͫANDOMIZŹCREETOАWAФAVžPCTEGQI TRTRINGPACEOUNTIC!TRI"HERO΢ROFƣABA SINSAARPTIDTȠAIԖHILűENIJRITŷOپyy||PF<2(z{kk;dQkfcSl cteccAc(c1djcOcceNEXT without FORSyntax errorRETURN without GOSUBOut of DATAIllegal function callOverflowOut of memoryUndefined line numberSubscript out of rangeDuplicate DefinitionDivision by zeroIllegal directType mismatchOut of string spaceString too longString formula too complexCan't continueUndefined user functionNo RESUMERESUME without errorUnprintable errorMissing operandLine buffer overflowDevice TimeoutDevice FaultFOR Without NEXTOut of Paper?WHILE without WENDWEND without WHILEFIELD overflowInternal errorBad file numberFile not foundBad file modeFile already open?Device I/O ErrorFile already exists??Disk fullInput past endBad record numberBad file name?Direct statement in fileToo many filesROROP8r  P in Ok BreakCC7@?2C:"7.   26_b`.G2ek"tI E%YŠʢ(CKڋG"t TډVM ۇڻOt "us2$͇ tI?Se\ZRw*r "(Zs2>2>ArR;Zs? t-Q(rt-s&uv8< u[R1ZC͌ro;RQ= Ir u QS[YQsZRtGZk u /X^VYSS[[Xڈ?YZSCCCCIIIICBI u͍ZRI#͎R0ڊڊC uCCC t< s< rCډԺRt<,tZ#Rt<,t#t<,t t<,tc;Z^VS0ˊC KtCC;ڋًts2͏; u @*ȊŊ軷2BB<"u3< t  t/CPTX,:tb u e u&Y. uÊ:uCBGO TOUB[S͐,Aȵ.[CSfȋ.$uC:uP.B y<(t.[?Y,<,utkZ: t5R[b uCC uCC7Q͞<td/;ډ [u"C|>t< uA XP\ڋ/ЊȵC;r/CXXĞXu:P&Q /S\S ;ڹ*'tNZKXK;tCCCPEX<uq2ж݋N ҋZtډNCCCCډKY\;ulCPCCC/CXS<u݉3[Cڋ3;tĹ'Q2 CC7CuËˋ/;ڋr[^V;^VSsYXXSRQZ[ tK/KSKيKˋ/<[C/KQS^V^V;SSsxZH^V?S- :^VS[^VCC/uËAB; uRJ/;u 2ى/[ K/KK;u ùQ2 ùQuUC.-Yr(R,)^VStZ PXt-Cu2^VȰSS:rźQQY[SC/C?ݵًZ fZR*뼇ڊ\uQXĞ^Vu)Q:rÊȊ*:ŠruCSڊ/7^VQK?Y[/Ç)YZQPtX u&P,9,S^V)SPY[XQeQQPRDZXȊ:s tC/C?ݵ*QR^VC[SRQ:uBt CuZZYZ2[ZZY*YZ[Cu!( a9SRC\;r0;s [S.[S9[^V, uKPfRS[YX^VSe^V t*s:rɵRCC?يZڊCڊ uËBCtuò<)tq,j)t|\/ʹPS%t[XĞQP2Oc#8< u N#$uXY< r ):#t :urt =CCXͮ0Kͯ;e u2]\`ͰCu 72O؊MV k u/2|XZ\e u6$u6Y,KKECCͱ 2؉|MPz9SQ;;^.Vu <:rهڋ0tRSJ܋Zr K^u uu C  Y.S"t TCV2tAڰP^)X@#V ۺuEًT.ø2vRSn 6Z^VlP7,X^:t^VSZ;uZ[^VR5[n5[f9suS9IIII xIIڇڋ\;ڋBAuIى\[<,uXĞ[ÊYs>Y:>Zv&ZX/rt<t<;uKCx.:uû2yP2rX2 y P 2軮2.C.7XRV "ËVu u>)    4V449335%5M54w423 tXA< t< u^VS.C.7XĞط.C.7Z^VGS tOCC?ڊ2PĹ tM< r&<.t(ACuXĞPĊtXĞ[(Cʰ< t<rt A Au뺊Czߊؠ:sǷۇڋڋ6tۊ tS.ڊ< s[ K5<#u.*^VSuljùQ׊<,uYS u|C$߲>뛋&/&;r +>>S[S'[>qtà)H(<r P<u h&)ۉPډ4MlDWpnr2z&&LێHwL.c2LS S.C u[>.PRADO BASIC if this interpreter is useful a $35 donation is requested 25-Apr-81LIST RUN LOAD"SAVE"CONT ,"LPT1:" TRON TROFF KEY SCREEN 0,0,0 PRڎ: jʈ^ZXV^ uj u t^à^ t2^VWj ut t_^S;rEr<.C u4N.:'t Cu2[2.kjAmP,;SXt̉kmj Suj kk ty2ˊn:r$&j u[w0. !"#$%&21/-,SQVlN.:t Fu2.^Y[G HKMP tsvRSOuw  SQRP<tM< u ot,t $ XZY[P>IN XSq[Sh[ËVVSM[àWP)*W>IO VʴXS>IO) [PRӆʊ>IZXSRSR Z[)Ͱ>OàIJu &HtRr2ڣNZÜSRPĀ((t u t 麷XP< ]XZ[Iq uO)  [óu L upS)<(1t PSN7[VQ Vu2%^uNYu^X<:r0u[2S u O< uQ ´Y[ÊI&Ht̀r ŀrQ<,t aYQ\t@-,<,tM tY Q?t#,<,t 0YQ+t, ͊YUY&)$ t 2 u(t sڀr Ӏs΀sɊ t >Ht\<Pt*(uŀu(t ŀt ŀuɈ&)HHI:tKģM&O:tOnJ:)t4&H)(tO>O>ISIH[t[Q>Hu,VQԻt@<,tYQYQS݀ur [諻t襻Y^,tFrOY^6M6K<,t~< sYQut,F,<,tf<r霼YQZt+,O<sYZRQYZK$ €t̀ Sط$M.N.O [6V<,t t[<sW&q t<sKZRt{,<,t t3&):r+ZRt[6h,<,t u Y Q衺t-ջm,< sY Q胺tT,x< sYQYQhYZVS>I[PP QSP=X[hrt YXPtKSQRƿ&6|&6~&|T&~ưr>I ƿ&~&|ZY[X轹Vr费e uV tP&):rHsCq ts7Sʊ>I[Pw<,tB,fP:)X Xt鐺%) (2R,*Y8X=P@H?@ t<sTSA؊['S$: 2ÊP2 t׻AXs'Cu[A_ jtSk?[ujr_^u[6([6\[_6A_p caw+fCzՔVijl7mGG'pfXQsOnwأp= #zL} Hz@PC$t >(kn@C:h* 51_c.1@v:k ^# bx-Àz&XƐn2xʵW ?h)͢SЅ@aQYԦo% 'N x9? 6!OgI#E@|o|p+L67EV߄vl: {Η@H½p Pv5$cCu͍M r5r1.eE%#!Dd,0Ƥ~@zZrN vH Tʚ;@B@B''d ;8|Yt&wz^Pc|u~r1e&X4#]I׳]b5~P$L~y DNn"~CÞ&0123456789ABCDEF;8r *SE[ËÜS[諾g 衾e ċM^66Ňdt铣Ç2ƻȈ/C/s 3S3ۉ[Ës%ûddRrÊ2ڠ֋6ȋ+AڋAÜIux ty3 u[Ø[Z%[Z C7CCCS([&Q2ʢ1 C0j ˠ tt=̀63݋‹Њxx+tpx2x;u3&‰ y y>ډí:tF;u9:u:,uFЬ:t ttȋ[Ë.K뾋.\ :tF;uS:u:,uF:u ttЭЋá t6װ t⡥ t؋*Ϣt"s٢>PQoYX9s_S![2ûxCCst4KKKKCCsKKuCCt $&Éá t6 t t3ɋ6*s ن߉ߓ֊2㜴 2 tFr6&% ĢÀr2ۀtЀ ˀ uy%*̊Ês/u!Buus t $ h %à tt6^@QQwxCCs8Yt u  1u uzW3Ҋ߹ U.VW+s_^ y u] ӊ֊] SWQ,0PPXy sx HPr3P$|$~t~y<Z66[Z#ZwY_[2 ڰ%V3ϋPX u<&u<-t<+tKs=a3ҋ.:t at$Ma.0jKj_j_jgjmjsj@j@j2A-AuQyQSWH_[YtC 2u -!zS[vU艤 uà u]rS[]rSWU,t >uSW\_[3r<-u<+trÁ rP Z02 SWuF_[3CXxot1N{Vu{y?H&@ˀ s%uJy3RV^ZyurRS662[ZZ = [Ztў y qW$SR66Z[* uRS3һ [ZyZ[<3һySR/Z[؏&s}WSRZ[SR.sZ[SRtZ[! Z[ Z[Ês9ٜ Ƈy"2y&sQSz [YS/sCC[SuC[ÊsAٜ ۜˀy2 tyBuÝs2y Ӄñ*f~Q u à,P vaZ[ | a Z[Z Z[1r\P2UXĞStÉ;謓u׋6S97uRPRxA[VSUuV2tK_^VI'CC^UuVp5RCCXS[Y*t .ч|E;?,u UB铓騚QSVWR9SCC[@u) t*t&x!u,vv& 뾀 Z_^[Yvt> x!urފ2t u> >xS[-  S[c>xu聯 良 脯 bt y b{r . S[Z[.PC..XZYHtQRPS[S..[Ss `/r [#K%st[x?*y26RZ62 t96rР tȊŠx2yPQRS[ZYXx*yZ.RC2Ɋ* R6**x6'6Q XZuRgx[*,Ƞ$@ur[t SP Z[P tt u*PxNSPPXuXPrĘ`kUn`ĘSX[xXYQPSPX[2ܠ t ů2X6P.^X ~?X u K<.tCRXrĊ&* t u JG@u2䣃໴ t+S[y-S[C0xhS;[t/CC>R2++tC< t<*tKSP2<-t<+t<$t<0uCsKKX tX t[%á̵s SRE2Z?,x&RXP uKxYtmy   .&kb.mb& . .&kb2.nb.pb٢   CC$ 롋  3&SQsCCuYt u&$ '[ÐĀsBuuu juVFF> ߈^ËQ r >y>yQYQ5]4sWYűuÀ&ews y $}P[ tau@It 2`7H.s=128 THEN look=look-128:c=c+128 140 IF look<=64 THEN c=c 150 IF look>=64 THEN look=look-64:c=c+192 160 IF look<=32 THEN c=c 170 IF look>=32 THEN look=look-32:c=c+32 180 IF look<=16 THEN c=c 190 IF look>=16 THEN look=look-16:c=c+48 200 OUT &H300,c:REM Send result to port A 210 GOTO 50 10 REM ***************************** 20 REM * Simple security program * 30 REM * for use with the PC 36A * 40 REM * By Alan Foster * 50 REM * (c) Database Publications * 60 REM ***************************** 70 OUT &H303,130:REM Set port A to output and port B to input 80 REM Set up screen display 90 CLS 100 COLOR 14,0 110 LOCATE 5,25 120 PRINT "***** System Status *****" 130 LOCATE 10 140 PRINT 150 PRINT "Zone 1 Main entrance doors Status" 160 PRINT "Zone 2 Service door Status" 170 PRINT "Zone 3 Workshop windows Status" 180 PRINT "Zone 4 Office windows Status" 190 PRINT "Zone 5 Office safe Status" 200 PRINT "Zone 6 Stores internal doors Status" 210 PRINT "Zone 7 Garage doors and windows Status" 220 PRINT "Zone 8 Security entry switch Status" 230 LOCATE 20 240 PRINT "Press Q to quit" 250 n$="Normal" 260 al$="Alarm " 270 set$="System set " 280 in$="System Inhibited" 290 REM Look at port B 300 look=INP(&H301) 310 REM Take action on result of look at port 320 IF look=128 THEN OUT &H300,1:REM Turn on set light 330 IF look>128 THEN BEEP 340 IF look<128 THEN OUT &H300,2:REM Turn on inhibit light 350 IF look>128 THEN OUT &H300,193:REM Ring alarm bells 360 REM Display condition of inputs on screen 370 LOCATE 18,48 380 IF look<=128 THEN r$=in$ 390 IF look>=128 THEN look=look-128:r$=set$ 400 PRINT r$ 410 LOCATE 17,48 420 IF look<=64 THEN r$=n$ 430 IF look>=64 THEN look=look-64:r$=al$ 440 PRINT r$ 450 LOCATE 16,48 460 IF look<=32 THEN r$=n$ 470 IF look>=32 THEN look=look-32:r$=al$ 480 PRINT r$ 490 LOCATE 15,48 500 IF look<=16 THEN r$=n$ 510 IF look>=16 THEN look=look-16:r$=al$ 520 PRINT r$ 530 LOCATE 14,48 540 IF look<=8 THEN r$=n$ 550 IF look>=8 THEN look=look-8:r$=al$ 560 PRINT r$ 570 LOCATE 13,48 580 IF look<=4 THEN r$=n$ 590 IF look>=4 THEN look=look-4:r$=al$ 600 PRINT r$ 610 LOCATE 12,48 620 IF look<=2 THEN r$=n$ 630 IF look>=2 THEN look=look-2:r$=al$ 640 PRINT r$ 650 LOCATE 11,48 660 IF look<=1 THEN r$=n$ 670 IF look>=1 THEN look=look-1:r$=al$ 680 PRINT r$ 690 IF INKEY$="Q" THEN CLS:STOP:REM Check for Quit 700 GOTO 240:REM Go back an take another look j SELECTP - PAYROLL V PC4.0 06.04.1987 MICRO-AID COPYRIGHT 1985 25 FORE STREET, PRAZE, CAMBORNE, CORNWALL, TR14 0JX2:F ,,: P: ,,P Z d{n:::::TEXT$ "MICRO-AID" :  :: TEXT$ "25 Fore Street, Praze, Camborne, Cornwall. TR14 0JX" :  : :sTEXT$"EXTENDED PAYROLL (c)": :x:TEXT$"Select option for PC computers": : b:TEXT$"0 - END - PRESS ANY KEY": ::TEXT$"1 - PAYE1 DATABASE ": ::TEXT$"2 - PAYE2 PAYROLL RUN": v : p: Q$: Q$"" A%(Q$): A% A%  A% "PAYE1" A% "PAYE2" ,,:&:: "AN ERROR HAS BEEN FOUND AS FOLLOWS:_"::= "PROGRAM LINE "R "ERROR TYPE "X 5 "FILE NOT FOUND - CHECK THAT THE CORRECT DISC IS IN DRIVE A":: "THE FILES ON THE DISC ARES AS FOLLOWS:-":::: (P,"_"): :"Press any key to continue ";#G$: G$"" /$: xP ((P(TEXT$))));TEXT$Vn Draw a double boxR1:C1:R2:C2O  IR1 R2 I,C1: (); I,C2: (); I JC1 C2 R1,J: (); R2,J: ();  J7  R1,C1: ();N R1,C2: ();e R2,C1: ();|( R2,C2: ();2 <P$"Enter choice to proceed, 1 or 2, or press any key to abort.": 8Fp draw a single boxzTITLE.POS(((TEXT$))LR1:C1TITLE.POS:R2:C2TITLE.POS(TEXT$): T h IR1 R2~ I,C1: (); I,C2: (); I JC1 C2 R1,J: (); R2,J: (); J R1,C1: (); R1,C2: ();) R2,C1: ();@ R2,C2: ();F8 ,: ,: (N," ");: ,: (N(P$)))P$;: ,: TEXT : : ,,3VERSION$"Version 1.1a 20.06.1988"V(TITLE$"Extended Payroll (PC)"2TITLE2$"Instructions for use of Payroll presented with PCA SEP 1988"<COPY1$"Copyright Colin Chatfield FIAP of Micro-Aid"FCOPY1A$"and Roger Valentine of V & H Computer Services"aPCOPY2$"25 Fore St., Praze, Camborne, Cornwall. TR14 0JX 0209-831274"ZR1:C1:R2:C2O: &dTITLE.POS(((TITLE$))nR1:C1TITLE.POS:R2:C2TITLE.POS(TITLE$): x ,TITLE.POS: TITLE$% ,(((VERSION$)): VERSION$;KCOPYRIGHT.POS(((COPY2$))R1:C1COPYRIGHT.POS:R2:C2COPYRIGHT.POS(COPY2$): TITLE.POS(((TITLE2$))R1 :C1TITLE.POS:R2:C2TITLE.POS(TITLE2$): &  ,TITLE.POS: TITLE2$: ,(((COPY1$)) : COPY1$;c ,(((COPY1A$)): COPY1A$; ,(((COPY2$)) : COPY2$; G$:R1:C1:R2:C2O: &H ,:  : " Extended Payroll - Micro-Aid, 25 Fore St., Praze, Camborne, Cornwall." j ,: : "COPYRIGHT": > ,:"This program was originally written by Roger Valentine of V & H Computer": ,:"Services and has been adapted under licence for the IBM PC and clones by": ,:"Colin Chatfield FIAP of Micro-Aid."" ,:"The supply of this British Payroll through the Public Domain means that you":  ,:"use this program for your own use and or that of one business only. Use in":  ,:"any other way is contrary to the copyright"; " law of the land and infringement":  ,:"will lead to vigorous prosecution. Prosecution in the past has been":  ,:"successful because no doubt of the official nature of the program."" : ,: "SUPPORT", : ,:"To print out the contract form set up your printer with a piece of A4 paper": ,:"and press 'P' at the end of this screen page. Complete the form and": ,:"return it together with #25.00 which ";6"entitles you to a printed payroll": ,:"manual and replacement discs when the government make changes to the": ,:"regulations. You may also ask for support by telephone if required for a"@ ,:"period of one year."!J ,:"Press 'P' for form or any key to continue with Extended Payroll ";=T (G$) G$: TU^ ("Pp",G$) rdh"SELECTP"jrp|"Update and Extended Payroll Annual Contract""To: Micro-Aid, 25 Fore Street, Praze, Camborne, Cornwall, TR14 0JX." "I/We the undersigned request that you send us a copy of the Extended Payroll":"manual for the IBM PC or clones and enter our company name for updates to the":"program during the following year." "I/we acquired our copy of Extended Payroll through:":: (O,"."):W "Company Name ......................................................"]"Address ...........................................................":" .........................................................."@:" ..........................................................":"Post Code ........................Telephone Number............................":"I/we enclose payment of #25.00 for manual and contract."!:"Signed ......................................................"Y :"PrtSc";0)"DATABASE PUBLICATIONS SEP 1988";{G$"": (G$) G$: T& 0 IR1 R2: I,C1: ();D I,C2: ();N IX J C1 C2b R1,J: (); l R2,J: (); v J1  R1,C1: ();H  R1,C2: ();_  R2,C1: ();v  R2,C2: ();~       IR1 R2  I,C1: ();  I,C2: ();  I  JC1 C2  R1,J: ();! R2,J: ();!  J3! R1,C1: ();J!  R1,C2: ();a!* R2,C1: ();x!4 R2,C2: ();!> !H{H}A PROMPT RESPONSE{1}{Q} {4}Ken Hughes presents a utility which will add a professional touch to your home video productions{1}{Q} {3}WHEN a professional broadcaster is doing a set piece to camera, the chances are he or she is using an Autocue device. This contains a copy of the script and is operated by a member of the studio staff who carefully keeps pace with the speaker.{1}{Q} {P}When doing a similar thing in your home videos _ perhaps an introduction to the footage which follows _ the end result of having your own Autocue would be a more polished performance with no breaks in continuity while you search for the right word or try to remember what comes next.{Q} {P}If you own a PC, you too can have the benefit of your own prompter. The program, which is available on disc _ see below for details of how to obtain it _ turns your computer into a home version of the famous {2}Autocue{1} device.{Q} {P}The basis of the system is a piece of software which reads text previously prepared on a word processor _ or simple text editor _ and a push button which plugs into your PC's joystick port.{Q} {P}If you have a colour monitor _ either CGA or EGA _ you are able to display selected areas of text in white characters on a red background. This allows you to mark the script where you want to emphasise it.{Q} {P}The way in which text is marked for this colour treatment is to use an open curly bracket ([) at the start of the segment and a close curly bracket (]) to return to normal screen colours as shown in Figure I.{Q} {P}The push button is used to start and stop the text scrolling up the screen. It can be controlled by the person doing the speaking or it can be controlled off-camera by another person _ as long as they can read the computer's screen.{Q} {H}Making the hardware{1}{Q} This is not a major construction project. On the prototype version I used a joystick handle and re-wired it to work on an Amstrad PC.{Q} {P}The wires from pins two and eight of the connector needs unsoldering on the printed circuit board inside the joystick. They should then be joined to the wires coming down the handle from the fire button.{Q} {P}When this has been done, plug the joystick connector into the port on your PC _ on the Amstrad, this is on the back edge of the keyboard. And that's all there is to it. {P}Many electronics shop _ such as your local Tandy store _ sell small hand-held push buttons. These are the type used by Michael Fish and his colleagues from the Met Office, to control the weather displays on the daily TV forecasts.{Q} {P}If you buy one of this type of buttons, you can use the lead from an old joystick or buy a 9-pin D type female connector and wire the terminals of the button to pins two and eight.{Q} {H}Using the program{1}{Q} Once you have obtained the program disc you can start work on your text. Any word processor or text editor will do the job.{Q} {P}The only points to remember are that the page width should be set to 39 and the finished script must be saved in Ascii format. If you're not sure how to do those, refer to the manual which came with your software.{Q} {P}The program uses a 40 cloumn display which gives larger characters on screen thus making the script easier to read from a distance.{Q} {P}Don't forget to mark any parts of the text with curly brackets if you want to emphasise it. Now you are ready to begin.{Q} {P}Set up your PC just in front of and below the camera. Enter PCPROMPT to run the program then select the script you want to use. The screen will show the current time and a message inviting you to press the button when you are ready to begin speaking.{Q} {P}Whoever is operating the PC should press the button to start the text scrolling up the screen. If the speaker is going slower than the rate at which the text is scrolling, another press of the button will halt it.{Q} {P}The button must not be held down _ it should be used as a switch. Press and release to start, press and release to stop.{Q} {P}In addition to its use as video prompter, this program can also be used for after-dinner or public speaking.{Q} {? Panel --------------------------------------------------} {H}How to get your program{1}{Q} PCPROMPTER is available on a disc with both the Basic Ascii file and an executable .EXE version ready for use on any PC with MSdos 2.x or greater.{Q} {P}Send a cheque or postal order for #**.** made payable to Database Publications to the address below.{Q} {P}If you don't have a PC, a stamped, self-addressed envelope will bring you a photocopy of the Basic listing. This can then translated for use on your own computer.{Q} {P}The address for the disc or the listing is:{Q} Video Action,{Q} Europa House,{Q} Adlington Park,{Q} Adlington,{Q} Cheshire,{Q} SK10 4NP.{Q} {? END OF PANEL -------------------------------------------} {? Captions ------------------------------------------------} {2}Figure I: The script being prepared in a word processor{1}{Q} {2}Figure II: A screen shot of the of the program in action{1}{Q} {? 942 words} --------------------------------------------------------------- Brian, You need to check the price of the disc - this can be done nearer the publication date. I have Figure I here and a screen shot of the program in action. See you Wednesday, Ken. .s 10 REM ***************************** 20 REM * PC PROMPTER * 30 REM * By Ken Hughes * 40 REM * (c) Database Publications * 50 REM ***************************** 60 REM 70 CLS 80 REM getdrive: 90 WIDTH 80 100 COLOR 15,0 110 drv$="" 120 WHILE drv$="" 130 LOCATE 1,1 140 INPUT "Enter drive letter for textfile: ",drv$ 150 WEND 160 IF right$(drv$,1)<>":" THEN drv$=drv$+":" 170 ON ERROR GOTO 1080 180 FILES drv$ 190 ON ERROR GOTO 0 200 REM getfile: 210 PRINT 220 txtfile$="" 230 x=POS(i):y=CSRLIN 240 WHILE txtfile$="" 250 LOCATE y,x 260 INPUT "Enter name of text file: ",txtfile$ 270 WEND 280 ON ERROR GOTO 1160 290 OPEN "I",1,drv$+txtfile$,1 300 CLOSE 1 310 ON ERROR GOTO 0 320 SCREEN 1 330 SCREEN 0 340 COLOR 14,0 350 CLS 360 COLOR 0,6 370 PRINT "Press the button when ready..."; 380 COLOR 14,0 390 GOSUB 790 400 tim=INT(TIMER) 410 CLS 420 OPEN "I",1,drv$+txtfile$,1 430 WHILE NOT EOF (1) 440 LINE INPUT #1,a$ 450 IF a$="" THEN PRINT:GOTO 620 460 FOR m%=1 TO len(a$) 470 IF MID$(a$,m%,1)="{" THEN GOSUB 980:GOTO 520 480 IF MID$(a$,m%,1)="}" THEN GOSUB 1030:GOTO 520 490 PRINT UCASE$(MID$(a$,m%,1)); 500 GOSUB 1240 510 REM 520 REM delayloop: 530 FOR n%=1 TO 5 540 q$=INKEY$ 550 IF q$=CHR$(0)+"P" THEN GOSUB 900 560 NEXT n% 570 NEXT m% 580 IF colflag=1 THEN COLOR 14,0 590 PRINT:PRINT 600 IF colflag=1 THEN COLOR 15,4 610 REM 620 REM bypass: 630 WEND 640 CLOSE #1 650 COLOR 0,6 660 PRINT "Press the Button..."; 670 COLOR 14,0 680 PRINT 690 GOSUB 900 700 CLS 710 anymore$="" 720 WHILE UCASE$(anymore$)<>"Y" AND UCASE$(anymore$)<>"N" 730 LOCATE 1,1 740 INPUT "Another speech Y/N? ",anymore$ 750 WEND 760 IF UCASE$(anymore$)="Y" THEN GOTO 80 770 END 780 REM 790 REM waitone: 800 q$="" 810 WHILE q$<>CHR$(0)+"P" 820 q$=INKEY$ 830 LOCATE 25,1 840 COLOR 11,0 850 PRINT "Time "TIME$; 860 COLOR 14,0 870 WEND 880 RETURN 890 REM 900 REM waitfor: 910 q$="" 920 WHILE q$<>CHR$(0)+"P" 930 q$=INKEY$ 940 GOSUB 1240 950 WEND 960 RETURN 970 REM 980 REM red: 990 colflag=1 1000 COLOR 15,4 1010 RETURN 1020 REM 1030 REM normal: 1040 colflag=0 1050 COLOR 14,0 1060 RETURN 1070 REM 1080 REM driveerror: 1090 PRINT "Drive ";drv$;" does not exist, press any key to reselect";CHR$(7); 1100 q$="" 1110 WHILE q$="" 1120 q$=INKEY$ 1130 WEND 1140 RESUME 80 1150 REM 1160 REM fileerror: 1170 PRINT "File ";txtfile$;" does not exist, press any key to reselect";CHR$(7); 1180 q$="" 1190 WHILE q$="" 1200 q$=INKEY$ 1210 WEND 1220 RESUME 200 1230 REM 1240 REM gettime: 1250 timdel=INT(TIMER)-tim 1260 m=INT(timdel/60) 1270 m$=STR$(m) 1280 h=INT(timdel/3600) 1290 h$=STR$(h) 1300 s=INT(timdel-(m*60)-(h*3600)) 1310 s$=STR$(s) 1320 x=POS(I):y=CSRLIN 1330 LOCATE 25,1 1340 COLOR 15,0 1350 PRINT "Elapsed time: "; 1360 IF h<10 THEN PRINT "0"; 1370 PRINT MID$(h$,2);":"; 1380 IF m<10 THEN PRINT "0"; 1390 PRINT MID$(m$,2);":"; 1400 IF s<10 THEN PRINT "0"; 1410 PRINT MID$(s$,2); 1420 m1=m 1430 IF colflag=0 THEN COLOR 14,0 ELSE COLOR 15,4 1440 IF y=25 THEN y=y-1 1450 LOCATE y,x 1460 RETURN . Ys.. YAAAAREADME YtPROLOG  YvARCUTILS  YTHIS DISK REQUIRES AN IBM EMULATOR E.G. PC-DITTO TO RUN.TO USE-BOOT THE EMULATOR AND INSERT THIS DISK.SELECT THE DIRECTORY OF INTEREST (THE IBM DOS COMMAND IS CD dirname ).THEN FOLLOW THE INSTRUCTION IN THE DOCUMENTATION OR RUN THE PROGRAMS prog.EXE OR prog.COM BY TYPING THEIR NAME (WITHOUT THE EXTENSION AND PRESSING RETURN. IBM BASIC PROGRAMS NEED BASICA OR GWBASIC.TO RUN. MANY WILL CONVERT EASILY TO ST-BASIC AND THOSE WHICH MAKE EXTENSIVE USE OF GRAPHICS WILL OFTEN RUN UNDER HISOFT BASIC ON THE ST.THE IBM PROGRAMS WORTH ACQUIRING ARE THE UTILITY PROGRAMS.(WHILE YOU WAIT FOR AN ST VERSION).THE IBM GAMES WILL JUST REMIND YOU WHY YOU BOUGHT AN ST IN THE FIRST PLACE. IF A DISK CONTAINS THE SOURCE CODES IN C,FORTRAN OR PASCAL IT IS OFTEN POSSIBLE (WITH A FEW CHANGES) TO RECOMPILE THEM ON THE ST. IBM TEXT AND DOCUMENT FILES CAN ALL BE READ/PRINTED FROM THE GEM DESKTOP AS WELL AS LOADED INTO WORD PROCESSORS FOR ADDING NOTES AND PRINTING. THE IBM EMULATORS WILL RUN BBCBASIC (NOT PUBLIC DOMAIN). SO WITH A BIT OF EFFORT YOU CAN RUN MANY BBC PROGRAMS TOO. HAVE FUN... MAMMOTH 6 JUNE '88 .  Yv..  YsPROLOG DOCYwPROLOG EXEY A.D.A PROLOG Documentation for the Educational and Public Domain Versions Copyright Robet Morein and Automata Design Associates 1570 Arran Way Dresher, Pa. 19025 Technical: (215)-646-4894 Orders: (215)-355-5400 1 Copyright Notice Please be aware of the following: There are two A.D.A. PROLOG products distributed on this disk. The public domain PD PROLOG system has been contributed to the public domain for unrestricted use with one exception: the object code may not be disassembled or modified. Electronic bulletin boards and SIG groups are urged to aid in giving this software the widest possible distribution. The second version is ED PROLOG, an enhanced version of PD PROLOG. It is not in the public domain. If you have purchased ED PROLOG, you have a license to make as many backup copies as you wish. Please understand that unauthorized distribution of this software will result in even less food on the table here at Automata Design Associates. This documentation may be reproduced freely, but may not be included in any other document without the written permission of the author, which you probably will get. 2 Introduction We hope that you'll get some fun out of this PROLOG. It will afford you exposure to THE fifth generation language at the cost only of some intellectual effort. The motive is perfectly explicable: We want you to think of Automata Design Associates for fifth generation software. It also gives us a nice warm feeling. The memory requirement is 192 k. DOS or MSDOS 2.0 are required. There are no features requiring IBM PC architecture. Products by Automata Design Associates There are five versions of PROLOG available from Automata Design Associates. .Public Domain PROLOG This serves to further the general awareness of the public about PROLOG. It also is an excellent adjunct to anyone learning the language. Most of the core PROLOG described by Clocksin and Mellish in the book Programming In PROLOG (1) is implemented. Trace predicates and I/O redirection are not. Memory space is deliberately restricted. We are not angels. .Educational PROLOG At extremely modest cost this affords an educational institution or individual a PROLOG system which provides the maximum available programming area available within the 8086 small programming model. Tracing, a debugging aid, allows monitoring a program as it runs. User settable spy points selectively allow this. Exhaustive tracing is also available. I/O redirection gives some file ability. An "exec" function allows the execution of a program or editor from within PROLOG, thus encouraging an interactive environment. Currently the cost of Educational PROLOG is $29.95. _____ 1. "Programming in Prolog", by Clocksin and Mellish, Springer Verlag, Berlin-Heidelberg-New York, 1981. This is the definitive Prolog reference. Second edition 1984 has a superior presentation but omits some material. 3 .SMF PROLOG A small increment in price adds full random access file capability. Character and structure I/O are allowed. The "asserta and "assertz" predicates are expanded and work with a clause indexing ability. One can assert clauses anywhere in the database under precise pattern matching control. The cost of FSM PROLOG is $49.95 .SMV PROLOG -- Virtual Memory At reasonable cost the addition of virtual memory gives an expansion of capabilities of an order of magnitude. The database on disk is treated transparently. No special provisions need be made by the user. Virtual and resident databases may be mixed. A unique updating algorithim preserves the format of the database as typed by the user while making only those changes necessary to make it equivalent to the database in central memory. The cost of SVM PROLOG is $99.95 .IVM PROLOG At the cost of some speed these versions allow the use of several hundred kilobytes of central memory for clause storage and 64K bytes of stack. Free of the constraints of the 8086 small memory model, it is our intent that the entire library of the Computer Innovations "C" compiler will be brought out in clausal form. Virtual memory is of course included. The cost is a mere $250. .LVM PROLOG For specialized applications, a version is available that accesses the full 1 megabyte address space of the 8086. The cost is $500. 4 To Place Your Order: The phone for orders is (215)-355-5400. Visa, Mastercharge, and American Express are accepted. Technical Information Technical information may be obtained at (215) - 646- 4894 Perhaps we can answer the following questions in advance: There is no support for: APPLE II, Atari, Commodore, or CPM 80 . Other machines from these manufactures may be supported in the future. The public domain version is available from the organizations who distribute such software. It is not available from us. The MSDOS products are available on 5" and 8" diskettes. Returns The software may be returned within 60 days of purchase for a full refund. This applies whether or not the software has been used. We do ask that manuals, disks and packaging be returned in excellent condition. Other Environments Various other machines are targeted for support. The code is written in "C", so it is fairly easy to move. If you are a hardware manufacturer and you would like A.D.A PROLOG to be available for your hardware, contact us at (215)- 646-4894. 5 How to run the Demonstration Programs without Knowing What You're Doing We strongly advise that you purchase the book Programming in PROLOG by Clocksin and Mellish, publisher Springer Verlag, 1981. For the impatient we give some advice. Type the demonstration program you wish to run. There must be at least one entry point within the program. Note: Please understand that these are demonstrations programs. Regarding user interface, they are poorly written. You will probably have to read Clocksin and Mellish to appreciate that the following examples of input are not equivalent: "yes." , "yes" . The animals program - "animal" Most of the examples require C & M for comprehension. The program "animals", however, can be appreciated by anyone. It is a traditional example of an expert system. Run the prolog.exe file. The prompt "?-" will appear. Type "consult( 'animals' ).". Here indicates you are to type a carriage return. The PROLOG system will load "animals" and compile it into an internal form. When the "?-" prompt appears PROLOG is ready to run the "animals" guessing game. The object of the program is to deduce the animal you are thinking of. To start it off type "help.". PROLOG will respond by asking a question. Because of the way the animals program is written, you must respond in a rigid format. You may type "yes", "no", or "why". Eventually the program will terminate with either a guess as to what animal you are thinking of, or a remark that the animal is not within its domain of knowledge. The program has learned, however. You may type "help." again to see what effect additional knowledge has on the program's behavior. You may also cause it to forget what it has learned by typeing "forget( user ).". The Hematology Diagnosis Program - "hemat" Although the logical structure is not as sophisticated as that of "animals", it is interesting for several reasons: 1) The program evaluates numerical data to arrive at a diagnosis. 2) Although inaccurate, it demonstrates that useful question answering systems are not difficult to write in PROLOG. 3) There are some mistakes in the program, which only slightly impede its usefulness. 6 This program uses structure input. Terminate all your answers with a period, as in "y.", or "no.". The starting point is "signs.". PROLOG will prompt you for signs of anemia. The program attempts to diagnose two varieties of a hemolytic anemia. The program could use a good working over by a hematologist and we would be delighted to collaborate. Prime Number Generator - "sieve" This program demonstrates that anything can be programed in PROLOG if one tries hard enough. Asking the question "primes( 50, L )." causes a list of prime numbers less than 50 to be printed out. "Sieve" is heavily recursive and quickly exhausts the stack space of the small model interpreters. 7 Running the Interpreter COMMANDS: Give commands in lower case. TO RUN: Invoke PROLOG.EXE. After the "?-" prompt appears, type "consult( )", where is the desired database. To exit, type "exitsys." TO ASK A QUESTION: At the prompt, type ".", where is a question as described by Clocksin and Mellish. Be sure to terminate the question with a period. The question may be up to 500 characters long. TO INPUT A STRUCTURE AT THE KEYBOARD: The structure may be up to 500 characters in length. Be sure to terminate with a period. TO ASK FOR ANOTHER SOLUTION: If a solution has been provided, the PROLOG interpreter will ask "More? (Y/N):". Only if a "y" is typed will the interpreter perform a search. TO ABORT A SEARCH: Simply type the escape key. The interpreter will respond with "Interrrupted.", and return to the command prompt. TO LOAD ANOTHER DATABASE: Type "consult()." TO REMOVE A DATABASE: Type "forget()." TO EXIT TO THE OPERATING SYSTEM: Type "exitsys." The system totally interactive; any commands the operator gives are and must be valid program statements. Statements must terminate with a period. All commands which take a file name also accept a path name. Any name which is not a valid PROLOG atom (refer to C & M) must be enclosed in single quotes. Thus one could say consult( expert ) but one would need single quotes with consult( 'b:\samples\subtype\expert' ). To exit the system, type "exitsys." 8 Atoms may contain MSDOS pathnames if they are enclosed by single quotes, ie., '\b:\samples\animal' . You may consult more than one file at a time. However, all names are public and name conflicts must be avoided. The order in which modules are loaded may, in cases of poor program design, affect the behavior. Syntactical Differences There are very few syntactical differences, mostly unrecognized and/or minor. When an operator is declared using the "op" statement, the operator must be enclosed in single quotes in the "op" statement itself, if it would not otherwise be a legal Edinburgh functor. Subsequently, however, the parser will recognize it for what it is, except in the "unop" statement, where it must again be enclosed in single quotes. Variable numbers of functor paramaters is supported. A goal may be represented by a variable, which is less restrictive than the C & M requirement that all goals be functors. The variable must be instantiated to a functor when that goal is pursued. Rules which appear inside other expressions must be enclosed in parenthesis if the "," operator is to be recognized as logical connectives. All operators described by C & M, and user defined infix, prefix, and postfix operators with variable associativity and precedence are supported exactly as in C & M. Please note that operators must be enclosed in single quotes when declared and removed. A name may be up to 250 characters long and may contain the embedded escape sequences \n, \r, and \t if the name is enclosed in single quotes. Arithmetic Signed integer arithmetic is supported. The range is -2 exp( 31 ) to +2 exp( 31 ), or approximately -1073741800 to + 1073741800. Integers may be used as file pointers (model FL and up only.) 9 The Built In Predicate Library The following built in predicates described by Clocksin and Mellish are supported. Those marked with asterisks have additional features: ?- mod arg name asserta nl assertz nonvar atom not atomic put call read clause repeat consult retract ! tab *display true functor var get0 *write integer 10 Description of the Modifications. display- put- write The functions "put", "write", and "display" have been modified to accept multiple arguments. Thus, "put( a, b, c )" would result in the display of "abc". The following built in predicates have been added by A.D.A. and support additional features. Atoms enclosed by single quotest, eg. '\nthis is a new line' can contain the escape sequences '\n', '\r', '\t' and '\''. If these atoms are printed by "display" or "write" they are printed just as they are. If they are printed by the "print" clause they are translated as follows: '\n' results in the printing of a carriage return and a line feed. '\r' results in the printing of a carriage return only. '\t' results in the printing of a tab character. '\'' allows the printing of a single quote within a quoted atom. The "portray" feature is not presently implemented. Description of the New Predicates clearops- Nullify the operator status of every operator in the database. concat( ( | ), ) A list of functors or operators is concatenated into one string, which becomes the name of a new atom to which or must match or be instantiated. dir( option ) Provide an alphabetized listing to the console of atoms, constants, or open files. Without options, simply type "dir.". Options are: dir( pred ) - list clause names only. dir( files ) - list open files only. exitsys 11 Exit to the operating system. forget( ) Make a database unavailable for use and reclaim the storage it occupied. ratom( , )- Read an atom from the input stream, to which matches or is instantiated. is optional. If is not given, the input stream defaults to the standar input. Input is terminated by a CR or LF, which are not included in the stream. 12 Prolog Tutorial Introduction Probably you have heard of the language PROLOG within the last year or so. You probably wondered the following things: 1) What does the name stand for? Names of computer languages are almost always acronyms. 2) What is it good for? 3) Why now? 4) Can I get a copy to play with? Congratulations! You obviously know the answer to the fourth question. We now respond to the other three. 1) The name stands for "programming in logic." This we shall elaborate on in depth later on. 2) PROLOG is good for writing question answering systems. It is also good for writing programs that perform complicated strategies that compute the best or worst way to accomplish a task, or avoid an undesirable result. 3) PROLOG was virtually unknown in this country until researchers in Japan announced that it was to be the core language of that country's fifth generation computer project. This is the project with which Japan hopes to achieve a domainant position in the world information industry of the 1990's. PROLOG is one of the most unusual computer languages ever invented. It cannot be compared to FORTRAN, PASCAL, "C", or BASIC. The facilities complement, rather than replace those of conventional languages. Although it has great potential for database work, it has nothing in common with the database languages used on microcomputers. Perhaps the best point to make is that while conventional languages are prescriptive, PROLOG is descriptive. A statement in a conventional language might read: if( car_wheels = TRUE ) then begin (some sort of procedure) X = X + 1; end 13 A statment in PROLOG could just be a statment of fact about cars and wheels. There are many relationships that hold. For instance, has( car, wheels ). has( car, quant(wheels, four) ). round( wheels ). Each of these statments is an independent fact relating cars, wheels, and the characteristics of wheels. Because they are independent, they can be put into a PROLOG program by programmers working separately. The man who is a specialist on car bodies can say his thing, the wheel specialist can have his say, and the participants can work with relative independence. And this brings to light a major advantage of PROLOG: PARALLEL PROGRAMMING!!! With conventional programming languages projects can still be "chunked", or divided between programmers. But efficiency on a team project drops drastically below that of the individual programmer wrapped up in his own trance. As the number of participants grows the need for communication grows geometrically. The time spent communicating can exceed that spent programming! Although PROLOG does not eliminate the need for task coordination, the problem is considerably simplified. It also provides the ability to answer questions in a "ready to eat form." Consider your favorite BASIC interpreter. Based upon the statements about cars and wheels previously given, could you ask it the following question? has( car, X ), round( X ). Does a car have anything which is round? The question instructs the PROLOG interpreter to consider all the objects that it knows are possessed by a car and find those which are round. Perhaps you are beginning to guess that PROLOG has the abilities of a smart database searcher. It can not only find the facts but selectively find them and interpret them. 14 Consider the problem of a fault tree, as exemplified by this abbreviated one: {Car won't start} | | [Engine turns over](No) --> [Battery voltage](no)-\ (Yes) v | {Check battery} | [Smell gasoline](yes) --> {Try full throttle cranking} | (failure) /--------/ | (details omitted) The fault tree is easily programmed in BASIC. Later we shall show that PROLOG supplies a superior replacement for the fault tree. Though the tree is capable of diagnosing only the problem for which it was designed, PROLOG dynamically constructs the appropriate tree from facts and rules you have provided. PROLOG is not limited to answering one specific question. Given enough information, it will attempt to find all deductive solutions to any problem. 15 PROLOG PRIMER I. Rules and Facts This is where you should start if you know nothing about PROLOG. Let us consider a simple statment in PROLOG, such as: 1) has( car, wheels ). This statement is a "fact. The word "has" in this statment is known either as a functor or predicate. It is a name for the relationship within the parenthesis. It implies that a car has wheels. But the order of the words inside the bracket is arbitrary and established by you. You could just as easily say: 2) has( wheels, car ). and if you wrote this way consistently, all would be well. The words has, wheels, and car are all PROLOG atoms. "Wheels" and "car" are constants. A database of facts can illustrate the data retrieval capabilities of PROLOG. For instance: 3) has( car, wheels ). has( car, frame ). has( car, windshield ). has( car, engine ). You could then ask PROLOG the question: 4) has( car, Part ). The capital "P" of Part means that Part is a variable. PROLOG will make Part equal to whatever constant is required to make the question match one of the facts in the database. Thus PROLOG will respond: Part = wheels. More?(Y/N): If you type "y" the next answer will appear: Part = frame. More?(Y/N): If you continue, PROLOG will produce the answers Part = windshield and Part = engine. Finally, you will see: More?(Y/N):y 16 No. indicating that PROLOG has exhausted the database. Incidentally, when a variable is set equal to a constant or other variable, it is said to be instantiated to that object. Notice that PROLOG searches the database forwards and in this case, from the beginning. The forward search path is built into PROLOG and cannot be changed. An author of a program written in a prescriptive language is quite conscious of the order of execution of his program, while in PROLOG it is not directly under his control. The other major element is the rule which is a fact which is conditionally true. In logic this is called a Horn clause: 5) has( X, wheels ) :- iscar( X ). The fact iscar( car ) and the above rule are equivalent to 6) has( car, wheels). The symbol :- is the "rule sign." The expression on the left of :-is the "head" and on the right is the body. The variable X has scope of the rule, which means that it has meaning only within the rule. For instance, we could have two rules in the database using identically named variables. 7) has( X, transportation ) :- has( X, car ), has( license, X ). 8) has( X, elephant ) :- istrainer( X ), hasjob( X ). The variables X in the two expressions are completely distinct and have nothing to do with each other. The comma between has( X, car ) and has( license, X ) means "and" or logical conjuction. The rule will not be true unless both the clauses has(X, car) and has( license, X ) are true. On the other hand if there is a rule 9) has( license, X ) :- passedexam( X ). consider what PROLOG will do in response to the question: 10) has( harry, transportation ). (Notice that harry has not been capitalized because we do not want it taken as a variable. We could, however, say 'Harry' enclosed in single quotes.) 17 It will scan the database and use (7), in which X will be instantiated to harry. The rule generates two new questions: 11) has( harry, car ). 12) has( license, harry ). Assuming that harry has a car, the first clause of (7) is satisfied and the database is scanned for a match to (12). PROLOG picks up rule (9) in which X is instantiated to harry and the question is now posed: 13) passedexam( harry ). If there is a fact: passedexam( harry ). in the database then all is well and harry has transportation. If there is not, then PROLOG will succinctly tell you: No. But suppose Harry has money and can hire a chauffer as any good programmer can. That could be made part of the program in the following way. The rule which PROLOG tried to use was: 14) has( X, transportation ) :- has( X, car ), has( license, X ). At any point following it there could be included another rule: 15) has( X, transportation ) :- has( X, money ). or simply the bald fact: 16) has( harry, transportation ). These additional rules or facts would be used in two circumstances. If at any point a rule does not yield a solution, PROLOG will scan forward from that rule to find another applicable one. This process is known as "backtracking search" and can be quite time consuming. If in response to the "More?" prompt you answer "y" PROLOG will search for an additional distinct solution. It will attempt to find an alternate rule or fact for the last rule or fact used. If that fails, it will back up to the antecedent rule and try to find an alternate antecedent. And it will continue to back up until it arrives at the question you asked, at which point it will say: 18 No. "Antecedent" to a rule means that it gave rise to its' use. For example, (7) is the antecedent of (9) in the context of the question (16). II. Grammar It is a boring subject, but it must be discussed. All PROLOG statements are composed of valid terms, possibly a rule sign (":- "), commas representing conjunction ("and"), and a period at the very end. A term is a structure, constant, variable, or number. What is a structure? It is a kind of grouping: 1) Structures consist of a functor, and a set of objects or structures in parenthesis. 2) Objects are constants, variables, numbers, or lists, which we have not discussed yet. 3) A constant or functor must be a string of letters and numbers, beginning with a lower case letter, unless you choose to enclose it in single quotes ( 'howdy pardner' ), in which case you are freed from these restrictions. 4) A variable must be a string of letters and numbers beginning with a capital letter. 5) A functor may optionally have arguments enclosed in parenthesis , as in: hascar( X ) or hascar. An example: "has( X, transportation )." is a structure. 19 III. Input / Output You now know enough to write simple databases and interrogate them profitably. But before we examine more sophisticated examples, it will be necessary to add input and output to the language. There are built in functions which appear as rules which are satisfied once. Thus the statment: write( 'Hello world.' ). can be included on the right side of a rule: greetings( X ) :- ishuman( X ), write( 'Hello world.' ). You can also write "write( X )" where X is some variable. Note that 'Hello world.' is not enclosed in double quotes. Single quotes, which denote a constant, are required. Double quotes would denote a list, which is another thing entirely. Provided that a match to "ishuman" can be found, the builtin function "write" is executed and the message printed to the screen. The builtin read( X ) reads a "structure" that you input from the keyboard. More formally, we have read( or ) write( or ) If you write read( Input ), then the variable "keyboard" will be assigned to whatever is typed at the keyboard, provided that the input is a valid PROLOG structure. The builtin "read" will fail if instead of Keyboard we wrote read( baloney ), where "baloney" is a constant, and the user at the keyboard did not type exactly "baloney." When you input a structure in response to a "read" statement, be sure to end it with a period and an . There is a convenient way of putting the cursor on a new line. This is the builtin "nl". For example: showme :- write( 'line 1' ), nl, write( 'line 2' ). would result in: line 1 line 2 There is also a primitive form of input/output for single characters. It will be discussed later. 20 IV. A Fault Tree Example Consider the "won't start" fault tree for an automobile: {Car won't start} | | [Engine turns over](No) --> [Battery voltage](no)-\ (Yes) v | {Check battery} | [Smell gasoline](yes) --> {Try full throttle cranking} | (failure) /--------/ | | /------------------------/ | | | | | [Check for fuel line leaks](yes)-->{Replace fuel line} | (no) | | | | | [Check for defective carburator](yes)--\ | (no) v | {Repair carburator} \----\ | | [Is spark present](no)-->[Do points open and close](no)-\ | (yes) v /----/ | {Adjust points} | /------------------------/ | | | [Pull distributor wire, observe spark](blue)--\ | (orange) v | | {Check plug wires & cap} | | | [Measure voltage on coil primary](not 12V)--\ | (12V) v | | {Check wiring, ballast resistor} | | | [Check condenser with ohmmeter](conducts)--\ | (no conduction) v | | {Replace condenser} | | | [Open and close points](voltage not 0 - 12)--\ | (voltage swings 0 - 12) v | | {Fix primary circuit} | | | {Consider hidden fault, swap components] | | \-------{Call a tow truck!!} 21 A PROLOG program to implement this is simple. Each statment represents a decision point fragment of the tree. The PROLOG interpreter dynamically assembles the tree as it attempts a solution. 'car wont start' :- write( 'Is the battery voltage low?' ), affirm, nl, write( 'Check battery' ). 'car wont start' :- write( 'Smell gasoline?' ), affirm, nl, 'fuel system'. 'fuel system' :- write( 'Try full throttle cranking' ). 'fuel system' :- write( 'Are there fuel line leaks?' ), affirm, nl, write( 'Replace fuel line.' ). 'fuel system' :- write( 'Check carburator' ). 'car wont start' :- write( 'Is spark present?' ), not( affirm ), nl, 'no spark'. 'no spark' :- write( 'Do points open and close?' ), not( affirm ), nl, write( 'Adjust or replace points.' ). 'no spark' :- write( 'Is the spark off the coil good?' ), affirm, write( 'Check plug wires and cap.' ). 'no spark' :- write( 'What is the voltage on the primary of the coil: ' ), read( Volts ), Volts < 10, nl, write('Check wiring and ballast resistor.'). 'no spark' :- write( 'Does the capacitor leak?' ), affirm, write( 'Replace the capacitor.' ). 'no spark' :- not( 'primary circuit' ). 'primary circuit' :- write( 'Open the points. Voltage across coil?:'), nl, read( Openvolts ), Openvolts < 1, write( 'Close the points. Voltage across coil?:'), read( Closevolts ), Closevolts > 10, nl, write( 'Primary circuit is OK.' ). 22 'no spark' :- write( 'Consider a hidden fault. Swap cap, rotor,points,capacitor.' ). 'Car wont start' :- write( 'Get a tow truck!!' ). --End program-- The above is a simple example of an expert system. A sophisticated system would tell you exactly the method by which it has reached a conclusion. It would communicate by a "shell" program written in PROLOG which would accept a wider range of input than the "valid structure" required by the PROLOG interpreter directly. 23 V. Lists Consider a shopping list given you by your wife. It is a piece of paper with items written on it in an order that probably symbolizes their importance. At the top it may say EGGS!!!, followed by carrots, hamburger, and finally a flea collar for the dog, if you can find one. In PROLOG such a list would be written: 1) [eggs, carrots, hamburger, fleacollar] The order of a list is important so that eggs and carrots cannot be reversed and PROLOG be uncaring. Let us put the list in a structure: shopping( [eggs, carrots, hamburger, fleacollar] ). Then if you wished to isolate the head of the list you could ask the question: shopping( [ Mostimportant | Rest ] ). and PROLOG would respond: Mostimportant = eggs, Rest = [carrots, hamburger, fleacollar]. The vertical bar "|" is crucial here. It is the string extraction operator, which performs a combination of the CDR and CAR functions of LISP. When it appears in the context [X|Y] it can separate the head of the list from the rest, or tail. You may have gained the impression that PROLOG is a rather static language capable of answering simple questions, but it is far more powerful than that. The string extraction operator is the key. It permits PROLOG to whittle a complex expression down to the bare remainder. If the rules you have given it permit it to whittle the remainder down to nothing, then success is achieved. An example of this is the definition of "append." Let us suppose you have not yet done yesterday's shopping, let alone today's. You pull it out of your wallet and sootch tape it to the list your wife just gave you. Yesterday's list was: [tomatoes, onions, ketchup] Combined with [eggs, carrots, hamburger, fleacollar] we obtain [eggs,carrots,hamburger,fleacollar,tomatoes,onions,garlic]. To take one list and to attach it to the tail of another list is to "append" the first to the second. The PROLOG definition of append is: 24 Rule1: append( [], L, L ). Rule2: append( [X|List1], List2, [X|List3] ) :- append( List1, List2, List3 ]. The general scheme is this: The definition consists of one rule and one fact. The rule will be used over and over again until what little is left matches the fact. The [] stands for empty list, which is like a bag without anything in it. This is an example of a recursive definition. Suppose we ask: append( [a,b,c], [d,e,f], Whatgives ). 1. Rule 2 is invoked with arguments ( [a,b,c], [d,e,f], Whatgives ). 2. Rule 2 is invoked again with arguments: ( [b,c], [d,e,f], List3 ). 3. Rule 2 is invoked again with arguments: ( [b], [d,e,f], List3 ). 4. The arguments are now ([], [d,e,f], List3 ). Rule 1 now matches. End. How does this cause a list to be constructed? The key is to watch the third argument. Supplied by the user, it is named "Whatgives". The inference engine matches it to [X|List3] in rule 2. Now lets trace this as rule two is successivly invoked: Whatgives | | | v Rule2: [X|List3] (List3 = [b,c]) | \ | \ | \ v \ Rule2: a [X'|List3'] (List3' = [c]) | \ | \ | \ v \ Rule2: b [X''|List3''] (List3'' = [], ie., empty set.) | \ | \ | \ Rule1: c L ( in Rule1 = [d,e,f] ) End. 25 L in rule 1 is [d,e,f] for the following reason: Notice that rule 2 never alters List2. It supplies it to whatever rule it invokes. So L in rule 1 is the original List2, or [a,b,c]. This example would not have worked if the order of rules one and two were reversed. The PROLOG inference engine always attempts to use the the first rule encountered. You could imagine it as always reading your program from the top down in attempting to find an appropriate rule. Since rule 2 would always satisfy, an unpleasant thing would have happened if the order were reversed. The program would loop forever. I hope that this tiny introduction to PROLOG whets your appetite. You should now purchase the book Programming In Prolog W.F. Clocksin and C.S. Mellish Springer - Verlag Berlin,Heidelberg,New York. 1981,1984 26  26 MZt ³ֳUPٶPζ NPiCP蹶pP讶P裶6mPP讽$mo&3蘁 *($m&o37 Pt93,Pk2P`mo]UP396V蜁qP6t g͋]U ;(u3PP P( u6VV t]ÍP6 몋]UPP6VW! t]ÍP6ֱ3]Uvt䈃v83vDvDvDv]UP3]U3]U3]U3Pvv]UIP蹴]UFvtvvvtFF t@vt vF t6vUavtvvvtvVF빋F]UPP'!]UC "v︃Fu]ËF]UvvttAF6Fu~u3]ËFu]ËFRP3PPvV(\ vvPvF/ t3PPvvvv Ӑ ]v艈3]UvvttF6Fu~u3]ËFu]ËFRP3PPvV[ vvPv. t3PPvvvv / ]ËvLD t v̈vv 8_]UVPzt]U\Pe_]UcPPJ]UhP;5]UpP& ]UvP ]U|P]UP籃]UPұ]UP轱]UP許]UF3FF3PP P|q rvV0@uPYv苆vvttPv, t$P6tvvvv 腎 ]v;6t蘊3]UP߰]U3PP3Pvvd ]U3PPPvvL ]UP薰]UPP3Pvv ]UPf`]UFvtvF t.3F %PF %Pvvt]vtvˋF]UvtvF t[vvtNF%tP6T3]63ҋv#D#T %P茵vtv랸]U2P耯z]U8Pke]U=PVP]UCP6ϫ]UEP6趫]Uvt t3]vvtt9 t3]Uvt t3]vvtt t3]Uvtv t3]ËvtvvVvVnv%u3]Uvtv t3]ËvtvvVvV#v%u3]Uvtv t3]ËvtvvVvVv%uv%u3]Uv%t3]ËFFvVvVF;Fu3]U3FF;F}vtv t3]F޸]U FF FFFF3PvvttvVjFFxF%u]3]Ë]Uvt t3]vvtt,FvttvvttFvtttvPvVvPPvvv #F t3]vvvtvv ( tWvvv 2vvv2PvVvvtPvvv a#FF t3]DPvVvPPvvv (#FF t3]vvv2vDv3]ËvD%tvttvt t"vvv vႃ]U ;Fu]vFV%PvFV%RP3RPGXZPᰃvFV%RP3RP!XZP軰vFV%RP3RPXZP蕰]Uvtv t3]ËF t13P6 V3Pvvv t3]Ëvtvȸ]Uvtv t3]ËF t23P6 VPvvvK t3]ËvtvǸ]UGP⩃]UQPͩ]U(F t3]3FۉFݍF؉vtvߋFFvVvVt vߊ% t53PvtVF %PFPvtttvFF% t F%]ÊF%u]Qvtt#V64 tF6F %PvvttvF% t3vDF%]ËFUvF %Pvvtttv<F% tvDF%]3]Ë64uP襉P,P6D t F %Pvvttv]ÊF %Pvvtttv]Ëv ;DtU t]ËFvttv3Pvvv\FF % t*F% tP6nP2PRFF% t5]ÊF %Pvvv]U=v% t7s.Pfc냁sPNP,PĄv%uFFt66֋]Ëvt%u)vtvt6vvvv6փ]vv?FFFsv%uv%u3 tvtvvvFFsv%uv%u3 t3]ËF u vt v F t3]3FF u v %uF%tF%txv %ujv DFvv t vv t%Pvv Fvv DF ]3Pvv 3Pvv [F%tOv %uAPv t vvg tv Dv DvF ]3Pvv F Fv tv 3]U]U]Uvvtttvvtt t]3]Uvvtttvvtta t3]vvv ]U3=vvtttvvttF=F t3]U3=vvtttvvttF=F t3]UF tF t]ËF t F t3]ËFFFFF t?F t8v vtvvtB t3]Ëvtvvtv뺋F tF t]3]UvVvVv VvVvK tvt t vt t3Fv tvt t vt t3FF tF t]v vvv t]Ëv%tF;Fu]ËF t F t3]v t vw t3]v vtvvt t3]v vtvvt]UF;FuF;F u]ËF t3vVvVv VvVF;FuF;F u]3]U F;FuF;F u]ËF tF t]ËFuFu]Ëv%uZv vvv t]Ê= t3]vvvFvt;vuvD;F u]Ëv%u,vv <Fvt;vuvD;Fu]Ëv%tv%t F tvt;vuF t vD]ËvD tFvDF vD]KFvvt~uFvDvt~uvDvDvDvD3vDFvDF vD]ËF tv%uv%tvt;vuF t vD]ËvD tFvDFvD]JFvvt~uFvDvt~uvDvDvDvD3vDFvDFvD]Ëv%tFv%t5vD t7vD t+FvDF vDFvDFvD]ËvD tvt~uvDvDIFvvt~uFvDvt~uvDvDvDvD3vDFvDFvD]ËvD tvt~uvDvDEIFvvt~uFvDvt~uvDvDvDvD3vDFvDF vD]HFHFvvvt~uvt~uFvDFvDvt~uvt~uvDvDvDvDvDvDvDvDvt~uvt~uvDvDvDvD3vDvD]3]UvDFFFF;Fw3FFF;Frvtvv%uFNڋF]ËFFF;Fv?GFvt~uFvD3vD3vD3vD3vN빋FvDvtƋ]Ë]U3F~}^v4vF tEvt vF t*v%t3vDv'vtvϋvtvFF뛋]UFsv%tv%t]3vDvtvF uv%urvt;vuvt~u vt~uvD % tvtP vtpOvtQUFFvtvvv+vt)3vD3vDFFvtvH]UF t]ËvtvKF]Uv4vvDFF t F t Fsv%tv%t]3vDFvDv%u]ËvtvF uv%t}vD;Frrvt;vuvt~u vt~uvD % tvtO vtMvtSFFvtvvtvvtvvD;FrSvDFF;Fr-FFv%uFvtvvDNˋFvDFvDFFvtv]UF t Fsv%tv%t]ËvtvF uv%unvD;FrcFFvDFF;Frvtvv%uFNڋvD tF tvD;Fr vvvtvn]UF t Fsv%tv%t]ËvtvF uv%ulvD;FraFFvDFF;Frvtvv%uFNڋvD t vt tvD t FvDvtvp]UvtvF uv%t{F t,vD;Fr vtvvtBFvDE3vvDvDvt~uvDvDvt~uvZB]k3v3vD3vD3vD]Uvttvvtttvs3]Ëv%uv%u&Pvvv t3]ø]Ëv% t3]Ëvtvt6vVvv6փFF% t3]vv3PPvV Pvvv t3PPvvvv S ]vI3]U vt%t3]ËvttvFFv%uvVvV׃v%tUv% tvt%t3]Ëvtvt6vvv6փ t3]FFvDT vTFFvtttvv%uvVvV׃v%tUv% tvt%t3]Ëvtvt6v vv6փ t3]FFvDT v T]UvVvVvvr t3]ËFVFVvT]UvVvVvv1 t3]ËFV+FVvT]UvVvVvv t3]ËFVRPvvlXZvT]UvVvVvv t3]vvvvEpXZvT]UvVvVvvb t3]ËFVRPvvlXZvT]UvVvVvv t3]ËFV;Vu ;Fu]3]UvVvVvv t3]ËFV;Vu;Fw]3]UvVvVvv t3]ËFV;V|u;Fr]3]UvVvVvvM t3]ËFV;Vu;Fs]3]UvVvVvv t3]ËFV;V|u;Fv]3]Uv t3]Á>.u]3]U7Pq8ۋ]U>(u4'2v t>)t 3]2]v t ]3]Uvw t ]3vD3]Uv$ t ]3vD3]U3PPPp3uP3]1  t卶Vq  tP3]Ë5.  t>,uC>u>u8u  ! t- tPPv\]Ë~u]U3PPPo3uP3] t卶VO  tP3]Ë5  t>u>u8u   t7 tPPvD]Ë~u]U3PPPn3uP3] t卶V7 tP3]Ë5 t>,u  tP tPPvE]Ë~u]U3F~}vF45AF]Uvvv tv3]ø]U F3FFvF4 uvF4 tF tv4  t/vF4B u1vF4 tvF4F;F} FFFFvF4F;FtF;FtvF4FF tTvF4\PvF4FZ;u'F%u F%u F%uZvF4PvF4Z;u'F%u F%u F%uFFFkF uvF4 F~F tTvF4xPvF4bZ;u'F%u F%u F%u]F;FvF4PvF4Z;u[F%u F%u F%u6vF4PxPj6 Pj3]ËvF4 tuvF4 tPOj3]3PvӃFvF4~u3vV3PvӃFvvv]ËvF4 t\F tPi3]3PvӃFv4~u3Pv҃FFPFPv]3Pv҃FvF4~u3vV3PvO҃Fvvv t3]3Pv%҃FFVƒPFVƒPv]Ëv4~u]UF t]Ëv%uvD%؋]ËFu]ËFu]ËFu]Ëv%uvD%؋]ø]UF t]Ëv%u vD%]ËFu]ËFu]ËFu]Ëv%u vD%]3]U3F>,uF>;uFF t K(F]Á>u>u>u68* t8F(F]3]U3F>u>u>u68j t8F'F]3]U3F>u>u>u68X t8Fx'F]3]UvfFF%u F%u F%]3]Uv,FF%u F%u F%]3]UvFF%u F%u F%u F%u F%]3]U3FvDvD>(u vE]v tg& t3]ø]v  tvt~u3vD]Ëvt@93vDvD3]U3Pvi΃FP tJ>)u3vD% t3]ø]Á>,u% t3]v]3]U% t3]Á>]u% t3]3vD]øPv̓FP ti>,u v]Á>]u3vD$% t3]ø]Á>|u&%v# t>]u$ t]3]UvV tvV tv~u$ t3]ø]vR]U>.t> (tn$ t g$ t3]øPṽFPu3]Á>,uB.$ t3]v? t3] $ t>)u3]ø]3]U>[u v9]Á>.u v6]3]U>u` Fv% t7v%3҉FVvv3PPPv˃FPh F[# t3]ø]3]U>[u v]Á>.u> (u v]Á>u vF]vF%u]ÊF%u3]3Pv)˃FP0 t#" t " t3]v]3]U>u!> (u PPvf ]Á>u!> (u PPv= ]3]U 3F>u8F>!uF>.u"> ,u> ]u> )uFF t> (tFvD!]ËF t+3PvʃFFvD!!v]3]UvA t v t vU t v~ t]3]U>u!> (t P6v ]3]U>u'> (t P6v]3]3]U>u> (tvD]3]3]U>uH ;8u> >u* P@Y؃RP3PPv^ ]3]Á>u# PYRP3PPv* ]3]U]U3FFFF3>?vVdu( PP/_v2v83]Ëv~uv~u]U% t!E tE]ÍP^3]ËFFvtvFsv%uv%u3 tNvtvFsv%uv%u3 tv13]ËF]UFP-P^]U$F@F?6bAC4 t3?F]ËF>t3FFFﰇF3?vV' t 3?]Ë F6GFVFF)A)3PvvVEɃFvVFr))FFvvv!F% F% t 3?]'F?v@ t P6 HP\3?]6{AC]UvF3F]U23EFFF݉F߉FۈF%FшF3FFFӋACFՉV3FFF%FFvV t3]6ƻ+ACFٍvVF t3]Ëvvہ>.tv tHF΋vv߸P$FPvvVZ> t vvF]øFΰP$FPvvVZ> t vvF]Á>tF3vV2u3]Ëvvvv߸P$FPvvV8Z> t vv$ "vD F]3]U@ tPvD% tAvD ;u3PPv4P6vz43vD vD @ t vDvt v tFvDFvD FvD vD ]Uvtvt vDT vv4]U33҉FVFvt vF u F% tFFF tLv~};|u>vD%uvDT FVvDT RPvD 3[Yʉ^NF ;FtF% tvt~uFvD(vt ;vu FvD FvDFvDFV tvtvdFVFVvDT vD]ËFFvtvFvD v DT vDT vD3]UF t#vt;vu vDT ]Ëvtv33ҋ]U3FF tvt;vuFFvtv݋F tu F%\u F%]3]UF~ u~ u~ uF% t ~ u F tF~u~u~u3]ËF6 >u PPPB3]ËF]U F t 3 F]]U% t%F3F]Ë t>u66% t_3PPPMB;mtm;$uPPF t]6PPH t6mMA36(D6(D6(D t 6(E ($mo;&t*6o@36*D6*D&o *oPUAP2P=PPw t]#6PPG t 5]ÍPD 6%]Í6%]Ë]UF;v6% t3]3FF;F}l6v%vv%FF tF t]Á~ u F t3vvFЉF댸]U t]U PP?   P P>  ]U36 %6%    3PP P?3]U6% t0  P Pq>36]Í P PI>   P%]U3PP P>3F%%%> u> u3]Ë t F%6  P*FF% t3]Í6 ‰Fv4 tjv4vF t[PvtV葩F t-Fvt68P ]Ëvtv랊F%Po9 thF%P< tWF%PM9 tF%P9 t F%_u3P1F% t3]벸F@F%'t3FPFF%'t&F%F3PF% t3]ϊF%\tF%F3PF36 6F'PzFF%_uFPVF|F%!u!FP2FXF%Pu: t;F%P7 tF%P8 t3PFθF F%Pc8 tLF%PR8 t3PF36 F%P F]ÊF%"t33PfF%"uF% t]ÊF%\t3P*FF%P+:F%Ru 6 F%Tu 6 F%Nu* 6  6 /36 FP}FF%/uQ-F%*u0*u$F%/u 3 F%PsF%Pb/FF%:uBPF%-uPFF8 F%PF%?u<PF%-uPFFF%PF%Pa t#Pl 36 F%]ÊF%P uV3P6 F%\u[> =uE3P =u P 8]6 + H 8]y \]ÊF%=t> =uU @ 8]Á> <u7 p 8]Á> .uK3Pq > .u  8]6 . 8 8]6 c 8 8]ÊF% =u p 8]6   8]ÊF%>uH3P > =u> h 8]6  x 8]38F%-u 8F%+u 8F%*u 8F%/uX 88 tF6 @ 36 F%]ÊF% t 轠3]ÊF%P 36 F%u P t]ÊF%]UFPS2Z;sU% t3]Ê% t PFP2Z;sP|6P,P2v<]U];_uXPf]]_3F]FF~}FFvDFFF3vD]F6]t6]3F~}3vvFF]Uv% u P5]vDF] v]UY;[uQPYY[3FYFF~}FFvDFFF3vDYF6Yt6Y3F~}3vvFF]UYvDFY]U3F~}36VF> Pgg k3%]U% t/ Ns P`]Ug3P P6g`4]UFVЉVF]UFv4 t vD tF;ks3vDvF3v3vD]U;kuP3P,P0]U64 t ]3]U3[Y_]PPPm33PPP[33PP-]UPv&F t3]ËvttvFFvVvVʔFFvVvV趔FFvvtFv%uvvՄ uv%t3]Ëvt u3PPdFFvvvv蹯 tv3]ËFtvvVvV藕vD tv3]ËF;FtvtvbvD vDvVvVFvD t1vt%t vt%tvV3]ËF;FtvtvvDvD% vDvt~uvDvVvV贔FF tTFP3PvF_|F;FtvtvwvD vDvVvV[F른P3Pvvvv - ]vvtvv  t]3]vv‚ uF t3]vv tPP3PMFFXDvvvv蜭 tvb3]vvttFv%tvDPPvޘFXDvt~u tv3]øP3Pvvvv F t]øPPv{FXDv%uvt~uvD]øPPv}FXDcvt~u tv3]øP3Pvvvv d F t]øPPvӗFXDvtt~uvttvF tWv%uFvDvD]øPPvqFXDvt~uvtv뢸]øPP3P:FXDFvDvvvv胫 t P3Pvvvv j ]v+3]v쓃 tvt tvt;vu]Ëv%tvvtt!vvttvvt@ t3]Ëvttt t3]vvtttvvt t]3]ËFFFFF t F t.F tF t]vvv D3]vvvtvvt膨 tvvv 3]Ëvtvvtvs]UF~vvDFvDFvDF]UFs]Ëv%~u vk]Ëv%u)vD tvLvD t v]ËFsv%uv%u3 t)vD tvL vD t v.]vő t]ËvD% t vtvD% t vtv]Uvn t]Ëv%~u vU]ËvD% t vtvD% t vtv]UFs]Ëv%~u v]Ëv%uvD tvL]ËFsv%uv%u3 tvD tvL ]vl t]ËvD% t  t vt<vD% t  t vtv]U3FFF tOF;Fu6F;u vt6 vt~u vv#]ËFFvtv몋]Uv%t vD% t vt t vt t]øPPFPԃFF tP(]Ëv4;vu vt~5[v4vF tF;FuFFvtvދvt;vuP(v#]Ëvt~u vv"]UF t vDv3]Ëvt vFsv%uv%u3 t vtvFsv%uv%u3 t3]Ëvt ;vuvt~u -vt vvt;vu vtvvt~uvt ;vu FvD v vt v%u vtv%uv%u vtvz!]Uv% t P&]Ëv%u v]UvD% t]Ëvt vF uvtvF tvt;vtvt ;vuvt~u vt~uvt ;vu FvD F% t1vD%t#v ;Duvtvt tyvFFFFF]U3FFF~|&v4vF u vD% tvt vF uvtvvD%tvD t Pq'F t3]Ëvt ;vu FvD FvDFFvt~uvt ;vu FvD v3vDvDT vDT vt~uvD vD vFFFFvtvFFv]U 3FFF~|3Fv4vF uvtvvD% t vD t vt t vt t@v%u2F tvt~u vt~53vvgFFFFkFFI]U3FFF~}0v4vF tF%vDvtvFFɋ]Uv%tPo"]3FvtvF tGv%u.vD;Fu#vD %;FuvD % tFF vtv벋F t5vD % tvt vtvtzP3P PPFP!vtv t#F tFFvtvFvD FvDvF vDFvDF vDF%vD FvD 3vD]UvtvF uFFvtvv%ulvD;Fuavt;vuvt~u vt~uvD % tvt vtjvtKv j]Uvt tvttvvVvV[3FF5PFP`$ t3F~|v4vF tgvD% tMvt tCFP;P3Fvt vF tvtvFv?PvtvFFu]ÍEPFP# tV3F~}Cv4vF t*vD% tFPJP\vtvFF붸]3F~}6v4vF tFPNPvtvFFø]UPPvv5]U3PPvv]URPi]UhvvttF%t3]Ëvttv t%vvtρF%t3]ËvD%uvD%u]ËvD% t3]ËFFFP}FVF % tF t F FbPv$F tvvv} 3]ÊF%uvePrvsPbF % tPFPPv>PFPZ$F t&vvv)} v3]ÊF %PF%u3PP̾FF % tvH3vD3PPFvvv|F% t3F % t!6PEvv3]ÊF%vDFvDFvD ]Uv~U;T u;s]Ëv~U;Tu ;u3]ø]Uv~EU;Tu;Ds]Ëv~EU;Tu1;Du,v~;u3]Ëv~;s]ø]ø]UPxrf]UFF3F~}2>.u> ,t> )t > ]t tFǸP+RPvOF]U33RP33RPv) u u3]33҉FVFV;V du;Fs]vfFFu3v3QSvv4[Y]ÊFv3QSvv[YFV둋]Uv%t"vD%uvD%u3]ø]U3PPPvFPv3F~K};vv%FF% t F%.u F% uF뾸.vVF3PP+FPFFPvFFP]UvttvvVvV2{ ;FuvD%uvD%u3]vP ;FtAvtkvt_3vDvDvDvD t vU]UP]Uvb~ t]ËvtvF t(v%uvvvkvtvы]UPv 3PvvtvF tvvvvtv3Pv]U3Fv%t]3FFFFFFFvD;Fr1vDFF;Frvtvv%uFN]ÊF% t%vD%tFvDFvD3Fv%uvD%uFFFvtvvDFF;Fu(F;Fu F% tFvDFvD]Ëv%u|F% tFvDvDvD%t]ÍF3FFPvVvv83Pvv3Pvv FvDvD]]UvVvV&x,vg| t&v%tvFv]߉Fvv%vvD%vDF Pvvv ]UF PvVvV6փvtv u^FFF PvVvV6փv{ tJF vT;t8v%Pv~FF Pvvvq t3]v%tF vT;uFFvVv6}vD tcFPFP݃FvDvDvvv3vD3vD 3vD3vD3vD 8FvDF vT;uvD% vD vvtv u^FFF PvVvV6փv t3PPvvvv ]v3]UPvF t3]ËvtttvvttvFFvVvVnv%t3]ËvDT Fv%uO~uvvvvts t ~u vvvvtQ t]3]Ëvtv5F t3]vvvv t]3]UF t3]3FF;F}vtv t3]FދvtƋ]U(PvZ^ t3]ÍFF3FFvttv؋vtttvڋvttttvvv] utFFvVvVWmvvnF܋%t3]Ëv܋DT F t&Pvvv蒈 t3]ø]ËFڃuFFމFD3FPPsFFFڋvDF;FtvtvGރvD vD3F~}CF;F};vP P1  PPF%PvxsFPF붊F% tvFv3Pvtvvvv Pvvv葇 tv݃3]FFvVvVkv؊%uePPvv衅 t3]ø3RP3PPvVM Pvvvk tvF݃3]ø]Ëv؊%tzPvvv+ t3]33RP3PPvVر Pvvv tv܃3]3PPvvvv r ]v.o t3]Ëv؋tvFFvVvVjvvvv肄 t3]Ëv؋tv3FF tvtvFFRP3PPvV Pvvv& tv܃3]3PPvvvv ]UPS]UPR]UPR]UPR]UPR]UPR]UFsv%uv%u3 t3]3FF tvtvFNF]U]P2 PPPSQRVUWFVv~u y ؃ y ރS 3SN;w r;w+@N^Yt tu t؃FV_]^ZY[XUv u v uF3Fv-uFv+tNF33҉FVv0|:v9/ 3RPvvXZRPvF0[Yʉ^N뻋F tFV؃FV]UfV!]U3F~ }6wF4 t vFvY]UFFv;tP PP%sFFv4v tF;FwFFFF܋F;Fu믋v4~5Fvs;Ft4FVvT;u!vDvDvDv4~5 FFFFF t2FVvT;uvDvDvDv4~5VvT;uF3v]UF+3ҋ]UF%As t t F%Zv t t t uNF%as t t F%zv t t t u]UF%0s t t F%9v t t]X[X'o_UvVvv7PP]UPRF fF FfF FfFV ZX] !P| ، &; v+ ߁;sǾ;s+; r; v ߋ+=v+Y׋3UQW0! u2[t[X+؉J!s +ۋPÿ +3PUF t uF t u t uF t u]UF%As t t F%Zv t t]UPRQFV N v FV YZX]Uvv4vFvЉ3v4]UvVvvV[P ]UFa|FzPZFˆFF]UF%as t t F%zv t t]UߎNj~33Iыv~tF]U؎v~N;rNO]U3Fv% tvluF36w~U>FvDFvvVvV% tF%]ËF]UvVv6oPPO ]U؎~NF]^[S'ow3UX t P PPQFFvF%FFN t(v% u v% u3vF3vFFFvF%FFN tDv% t/FvVF~ |v% tFNF3vV> v PP+6wm6m6mD6mD 36mD6mDDFFvVvVF% t;PP6yo6o6oD6oD6oD EFFvVvV PPl6yo6o 6oD 3RP6oRPXZ6oD  6oT +‹6oD F6oD6oDPP 6{q6q6qD6qD 6qD6qD~ |P PPMP" vFPv+FP7]U~v3]ËF%FsFv4v tovD;Fr[FvT;r6v4Fvv4~5vD+FvDFv vDFv4~5 FFF tFPF t7FvFvDFF;Fv3PF+FPFVP3F]UߎNj~33I-+]UߎNj~33Iы~vtututH@]Uvub$ t V =tJF VN<t <t<t7ڋDDʋӰB\!3ɉLLLI#ى\ A+ˉL ]DxD @Ћ]UP33RPvk]U^u% u,G;G}5w@2G<tQ< tX]À'G2]S =t^S?O W_![rK=tGGG GG tO.tuSl=t'< tO 끀@G]UvNF t3Pvv]$ P PJP F]UF^' t;~ twF@GO;O }P]tS P=t ^ˀ t'tcSPPPS=tP[ 떃u w!S@OW_![r%;u3GGG GG 'ߋF]GwG@]U3FF;F~1vF~uFvVF% u3vvF tF]3]Ë]U3FF3Fv% uvF%PfFۋF tFNŋF tFF tFN렋F% tNF% tN}% +awrbiZD<FPM3PFFPvF~t~u>t.PFFPvFNƾƾ~u~tP33RPv ~t6wF4Ƌ]3]U~v3]ËF%F FPF+3Z;s3]ËFFЉF]U*3FFvuJv%:u:3Fց~}vv֊%PvvֈF3vFFFF t  # t)FFF; sFFFFF F=V‰F3FFFvV\vVvV% t<FFFFDFvVvV% tF% thF% t8DFFFF% FvVvVW% tF$F% tF% tFF F3F܁~ }6wF4 tF߁~ uqPFރPFF tRF%vFދvDvD FvDF܋vDF6wVF܋]ËF%F t v2F t+>FFFvVvVE% t F%F t v ]Uv% uv%%tDFFFv% tv%%tF+F3PvvvփFFFFv%-tȉF tFv%F~0uF Fv%*uv F FF63Fv%P t FvF0‰Fϋv%.tȉF tZFv%*uv F FF63Fv%P t FvF0‰F3Fv%P ltȉF tFv%PbF tFF Fv%PvbFPvFVq 9FFF ^FF FFFF tEv%As t t"v%Zv t tFF t!F FvFTFVFF ,~}v F FVv F 3҉FVv捆bPvvF ubFFV usFvFF tLF;FvAFPFVƒV+Pv0PF+FPvwFFFPFV‹V+ƒPFV‹V+Py.vV+VbFPFF FvF4vVFFF F tF;FsFF3FnF F FF3FVFFF3FCpcsdDxXuUoObBgfeD,\\TTLLDD<<ËF t_F;FvWF t0v%-u#~0uPFFPvvփNNFN;FvPvVvvփF;FvF)F3FvvvvփF t&F tFN tPvVvvփF]UF3RPF3RP#XZFVFVruv3FvFF t3PvvUF]UvD]_ȎX& A&5؎Uv@\LT!r;uLLD )D $ߋ]ÈDDw @]U6wF4"]Uv vv6wF4]U^7CC_^ZY[X!WVRQSP^ 6CCX]UF- t(x t"PV- )+ ! t 9nvnX tL!6 ,±$'@'NuUv sD拜w t8u3 uNvt/2QVSP=t^YF]øP2 PP@G +G;+ȑPS@O W_![r];uSY2W;|J#+PS@_![r8;u.Y O 'GGG GG F]GwG@]À u&'tSPPPS=t[ U*3FVփ!V~ |FVusFFV؃FV6 3RPF RPvv$XZ؃RPXZ%NvF ؙRPvvXZFV t\FVFV6 3RPF 3RPvvXZRPXZ%NvF RPvvXZFV t밋F t -NvFփ!+F3҉FFPvvF]U3PvVFF%et uoF%gt tHF} t uF~ t u t t t u t uF} t uFF tF FFPvVVЉV~|FF PvF tFPv FP^vF u|EvF~}-vFF؉F +vF PvFRPCF}-FPF+FPv90P+FPv8F%gu-Nv%0u 3vv%.u3vv ]U3FvV&FPP  PX tFPxFP/ F3FFP PX t~}3]ËF t\~~F PFPNF t PFPPۍFPvFPoPFP^ PV2X tk FFN tXVV6w FVFPX t'6 FVFP2PFFP PX u FFN tXVV6 FVFPfX t'6w FVwFPpPN랍FPZ PRX t PBFP;xPeN3RPFPPFFFFv%@vFPFPPFP PX tFP P}X t3PvVoVЉVF t FPFPvVF]UF FFP^ PVX tFPGFPn-vF~}H0vF.vFFF~} F)F3FFF} 0vFcFPXZFF0vF PFPFRPFPNF t믋F t .vFFN tGFPl*XZFF0vF PNFPGFRP3NxFPb3vF+F 3ҋ]PSQRVWUfF]_^ZY[XÃFFvDFDFDFFUFA|FZ PZFˆFF]Ët T\DUFFAFvVvVvVB% t]3]U@NV!r;u]øPSQRVWUfF]_^ZY[XЎW_E %E%] VW_^D %  DEËE E E E uE6E tm ]]]]E ueUUU )]UF tv ]= vHF%1FF0CP3PPPpF^ t؉F v F%1FF0CP3PPP2FV^ t؃FVv! vFtF uv~vv~~D+EtyEȻYKKyً3x CC%CCE y3CC1Wp^~NF uF vFVvF33SS0vFV vF3SS y ؃πvRP0CPS~F tFuv~vvzv~q3SSSSSS_uՁչ . t.] .]CCsCCtڋF-0@FFދF3FF܋[~8" " " " Fuv~F uFFF F ~ v[Y3PPPPQS v5Qv~;rwNNOOv~FFGGvFFYċF-?)FF1F~v~[ &nv! y2y:}!ĹR9u NN$t w$t$t2 F ~FFEFEFE~iFFvD3۹%u؋8FV^F;+~FVt^^Fxu=Ff ~F%-?=}#=~)F-8yV^F 3~E===\=\==/@>=<=><-*+=..argassertaassertfaassertfzassertzatomatomiccallclauseclearopscloseconcatconsultconsultvdebuggingdirdispfdisplayexecexitsysforgetfunctorget0indexintegerislistflistingmodnamenlnlfnodebugnonvarnospynotnotraceopopenprintprintfprtprtfputputfratomreadreconrepeatretractseeseeingseekseenskipspytabtabftelltellingtoldtracetruetypeunopupdateuservarwritewritefzzzzzzzzzzzz A.D.A. PROLOG Public Domain Demonstration Version Version 1.0 01/04/85 Copyright Robert Morein and Automata Design Associates 1984 Dresher, Pa. (215) - 646-4894 CON:rwb ?- Invalid question. Please repeat: ?- No. Feature not implemented in this version. Listf Exec Open Close See Seeing Seen Told Tell Telling Seek Type Index Not correct. Observe the rules for typing structures and try again: - Writef Dispf Printf Error: put argument must be an integer or character. Putf Nlf Tabf Assertfa Assertfz Interrupted. Your input was longer than %u. Repeat: ERROR at line number %u Scanner buffer holds: %s Error is probably just before this. More? (Y/N): ! OR placemark failure. Yes. Out of memory. Aborting. Maximum number of juxtaposed operators, 127, has been exceeded. error prec: %d Incompatible operator associations at line number %u. Postfix parse internal error. Prefix parse internal error. Error in question, "%s". Cl_name clause error. Parse predicate fault: %s Error at line number %u, "%s". Yes., %s = :- . undefined. []%s%s %c%s%c%s%ld ( ). ()[|%s[]],_, ; !failnot :- . Cont_lit detects invalid control node: %x._, ; ! failnot :- .xfxxfyyfxyfyxfyffxfy String too long (254 max): %s End of stream. Problem is too big for available memory. Aborting. pushnode error. Placemark out of range. Remfunct hash error. Remfunct search error. remcl1 type error. orph_rcd wrong type.preds %s (%d)file %s %s Virtual memoryrw Indexing %s. Compiling %s.$DLwrb Update Exiting to the operating system.$%d Trace Notrace Nospy Spy Debugging NodebugFREE$ NO CORE$NEEDS DOS 2.0$ TOO MANY ARGScALLOC$ $WRITE(0(t1(01(1eC(C(5D (C#(D&(zD(B*C,UB.(ʃ04B 8 @ I R6Z_ fk)mrt{ু #QC+61(?   Brn* ֮n&_)X.s4;?DYHŦMFSX0^ emqx}0mam  8 H X ` x  8 h 0123456789ABCDEF$@Y@@חA7yACnF?O8M30HwZ?sOu/ ?{Gz?-C6?:0yE>ؗҜ<2#I9tPFPsNFPoCu":PFP>tPFPBNFPu t n# PFP6*#P3FP36P2P<)]UF fFF t>u TP2 v; F.P4HFF-uFP_P=u F+u*FPhPj=uoP)2 FFFPXFFFP1 P1 P{1vV P1FP*P1qNP1~} P$1FEPq1FPPv$PP1v| tF;| P0FP1v  t(FfFPv5P0 PP6F4tt.P06F4tJ, P 08PP;u PM0 vV!v t&FfP/P5F u  P/ FP%P/P{F u 0P/ FP!UvEI tFf06F4D!F*6V4D!F*tF6F4DT6F4DTAPvV%6F4D!F 6V4D!F*uF6^4+DT6^4+DTLP^vVFPvK1FPt!WP.F/tH t><v. t^ZF]P-=zxwvutsrqpomljihfedcba/? -+p  \jD,lZT{aaJJ))&&-u +u u uK]Uv, PP66*nP, PP66*sP,]UfububP,)PP7tfPU,]U PPFP:*P/,6F4P,6F4DP, P+6F4t& Ps+ PP6F4tt)KPI+6F4D!P1+:P'+]U6F4PxP;6F4DPxPBFxP&xPA~-tP+@PFPc'FP%FP@vu]ÍP*&Pp7FFPDP*FD P*F1P*]øP&*:ANY z g ~Yu~NuOvVFPPc$ t]Í6F4DPFPEFP$FP?FPxPDu*P)]vvFPxPF Pc)F]UvVFPGP# t]Í64PvZ;uTPv)]øFF;|)6F4D!*t 6F4P:Pt96F4DP:PD:P#:P>FPzP396F4DPzPCzP#zP>vvzP:P t]ø#6V4D!6^4+DT6^4+DTF P']UqPvn FFu&sP'v'P']øF~}vvvVFދF uPvFFuP' PPv'Pj'#P3FFYu FNu:FAu$v,!v#!P']øP&롊FNu$P&v v ]ÍP&v v5PvFFu/P&v&P&vy ]ø|P2FFuPX&]Í,PF& PPvc&5P+& PPvH&:P&F|Pvv4F~!" t9"vvv4>P%v3]vvv-FvvvuF|PvvFrvZF~}vFvvFv&~}F uLP %WPv^FFu&YP$v$zP$]øF|PvvF~~'vvv,F|PvvFvx~|#F;Ft~Pd$vF2]v62~}P9$vK3]ÍP$]UF P#P# P0FFTu FUuEFAuP#]ÊF } FFP:#P#닊FTu P}# Pp#!Pe#P/FFYu FNuEFAuEP+#]ÊF } FFP"iP"닊FYu P" P" Pj"FF;|6F4D!*u FTu&6F4D!*uFUt{6F4PFP26F4DPFP8=FPFYtP" PPFP:"P"P.FFYu FNu FAu*F } FFPP!P!~? t AF-YFP! PPFP!Pf!FAu PQ![FYu"FYu P0! P#!FYuFP*0P! P F++v tMI]UDPX-FFYu FNu P4 ϊFNuP ]Í6F4PFP06F4DPFP>;FPP1 FPB/0P 6F4-FFF;"6F4>F5Fո]Uv40u]Ë6@FFPP*uF@t6\-]Í6V6P RPF~t'>| 6P!PF6,]UF~ },6v*u~ }?6vFF͸ F~ },6v*u~ }?6vFF͋]UAPP|-6vo-]U "P*FF6vF6A@vF:vFvvDFF~ }6AvvFF߸.vF~ }6AvvFF߸vFV F~~7FVRPRP2XZRP6Av3[Yʉ^NN‹FVvDTRPFVRP'XZvDT6[6Z‹vD6Y6X‹vD vD!]UFF;}6F4*Fߋ]U\PaPygPnqPcvPXFPbLR,+- FVFVFF;}Y6F4DTFVFVRP6F4DTRP+&XZFVFVF랍yP PP6|P PPvvPo PPvvxPQRPRP%XZFV PP664P  PPvvP]UPP+PfPPPP7PrPPzzu Pg PZ5PO]U\P=P2P'P P PM P]Uv P P P P P]Uvv;| P7v]UBFF;|)6F4D!#t 6F4PFP)6F4DPFP"4FP*6V4D!6F4DT6F4DT@ P PPFPN P PP6F4ttT Pu PP66|X PUF P]UBa P-@PFPqvu]ÍFP(u-vP$PP#t| PFP2FP'u":PFP"t~ PFP2FP (FFu]vf%FPv'v t P]U P/@P:Pr:u]Í P:P1ul]ø:P:P"t:PzP'+6F4PzP&:PzP1zP^zPs,6F4PFP&6F4DPFPM1FPzPFP!t= P,FP" PzP  P]Í PFP PzP P6F4DPzPm  t P]ø]U Pw@PzPzP&zP;+zu]ÍzPzP  t" PzP P( P@PP:PP*u]ÍPPt  t"K PP P$zz;|6z4DP:P$P:PzPP:P.||t4P:PPf P:Po PPv PPa ~~Au P]Ê~Yt P6z4PFP#:PFP[.FP"PP#PPFP t  P ( PP6z4DPA#  Pzg]UJvVFP P  uvPHvvVvAPRPFVRPXZFV PhFP^ PS PPvv\ P5 PPvv> P]U@ P@PFPFFP'vu]ÍFP;P u P]ÍB PFPY Pv:u64PvZ;u v:t]ø]Ë]UP&FFP^v4DPv4DP+FWv4~=EU;Tu;DsF*v4~=EU;T|u;DvFFv4~=E;DsFTv4~=E;DvF:v4~=E;DsF v4~=E;DvFFv4DPv4DP*Fv4D Pv4D P*F~tFFFFB\ PP} PFedsn6$#r#!##PFZ;uF]ûF]Ë]U"PP6P"]UB Pa@PFP vu]ÍFPv-uvtFvvFvP P't'F tv  v]Í P P P P P P]Uj Pp@PFP FP! FP7$vu]ÍFPFP t P]ÍFPFPSFFFFFF;}3V‰FvvFv]Fċv]U5 P F+u ; P > Pv FFF;|6F4D!*u F-uv P F6F4D!*t F+uv P F~uFM P U P F\] P ]UF-t ` P  u P @PrPrP@rPU"ru]ÍrPrP t P8 ]øFFVFVFF;|56F4D!*uFP6F4DPrPUFP6F4DP^&FF u ~uF-t~uv,߃6F4DT6F4DT*6V4D! PރF6F4DTFVFV6F4DTFVFVF~u  P b P  PPv P  PPvv Pw  PPvv PY  P ]UF P: F+u  P%  P @PFP^FPFPvu]ÍPFP6FFu P FP P P9FFYu FNu P ϊFNu5Pc vT]ÍCPH v9FPPHPFPFFu'JP FP fP]øFF;|6F4D!*u F-u 6F4D!*tYF+uO6F4DPFPFPDFPoPFPvPjPvF]v<]Uvu]F~}6FvvFݸ.v F~ }6vvvFv 6]U*Pv t?Pv t]vFFu]vPYF~t8wPva tWPvN tvPF~tv]øvDF]UF3ҋvD!T#]UvP6V!FF'6V6V!P]UvPs6V!FF(6V6V!PLu]Ë]Ë]UvPv]Uv Pv%vvu]ø:PvumPv vVuvvvvbuvPP~t]ø]UFFFFvtv tvvFF׸v]UoFFFFFF FFF;F}FFFFF0PPv-PvFP vFPvP-P0PPv9]UF?FF F0PPv:P0PPv]UPP]UP P]Uvv]UvFRP]UFVFVFFFV%usFV؃FV-vFFF~ |6FTRPvvt XZFVFVutF t?FV0vF6FTRPvv, XZFVFFsF t 0vFvF]UF PvvFRP ]UFPvvFPFFFFFFF;F }F vFFvFFPv]UFPvFRP]UF PvFPvvc FP]U FVFVFFFF~}u6FTRPvv XZF~tF t=6vvF6FTRPvv XZFVFFF t 0vFvF]UFPvv-FPFFFFFF;F }F vFFvFFPv]UF PvFPvv FPl]U t'F u PPTFPPD t'F u PP%FPP]UFFvtvPzF]UvvFF;F}FPBF]UFvv P PP~ PPqFvv tvvvVF׸vV]UPPPP]UP0P Fu]ËF]Ë]U(tW6FڋFFvVvV!PF܉FFމFFځFFڃuvT]PPi FvPU FڍvVvV!PRFFF܉FFމFFځFFFFFFF;F~IvFFPFF tFFFFFF~uFFvظP FnRPFRPXZvT]Uvh Pv^ Z;tv]ËFFFFFFvt.v?u vv vvFFFǸv]UFPFPPP +-7h7[7 PA6F4PFP 6F4DPFPiFP0PFPFFu'PBFP8P-]ÍPPFF+uPvVv"uFFFP+ FFvX  n8e8e8c8c8~u)FF-u%P-Pt tJF~t=~t6~ u~u} t^WF~ u~u'v5P ]U\8PFPAPNP +-u9Y9L9 PP6F4PFP 6F4DPFPxFP?\PFPFFu'^PQFPGsP<]ÍP*PFVF+uPvVv+uRPvvFXZF~uHFVut7PF~}vvP.F PRPvvXZudu_FVut#F-uPA]P3 PPP P~u0PPvv\!PFF0PPFRP4 PWFF~ }~u .vv FvvFV tJF~t=~t6~ u~u tkdF~ u~u+vFF~} vv$PFލ(PF~}vvPlF+P]U^NVƀCt]U8FFȋvFȊFFN t+vȊ uvȊ uvȈF˸vȈ.FΉF̉FʋFFȸFvFȊFFN uvȊ tyvȊu FȃFFȍvЋVF~|3P PPVvȊ tFNFbvЋVFCFȋv̊>u F̍EFȋF tFGvЉFPvP]Uv]UIP PFFvtvPPFߍTP PP]P2 PPPSQRVUWFVv~u y ؃ y ރS 3SN;w r;w+@N^Yt tu t؃FV_]^ZY[XUPRF fF FfF FfFV ZX]Uv t'FvF;u NF]̸]U tCvVFFVFFFFFvVvV t]øFvF t]vF tv]øPFPvcvPFvvF t]Ë]UvF tPvvP PP8F]UFa|FzPZFˆFF]UF t(x t"PV) ! t 9nvnX tL!6,±$'@'Nuú !P.،&;=v+=߁;sǾ;s+;;r;9v9ߋ+=v+Y׋3UQW0! u2[t [X+J! +ۋPÿA +3PUFFv;tP PPFFv4v tF;FwFFFF܋F;Fu믋v4~5Fv;Ft4FVvT;u!vDvDvDv4~5 FFFFF t2FVvT;uvDvDvDv4~5VvT;uFv]UfV!]U t7FFAFvV vVvV  t]vF t]vPFvXF t]Ë]UFFv t1vArvZw vЈF‹F]UߎNj~33I-+]UPSQWȎ~F& A&F_Y[X]UߎNj~33Iыv~tF]UVv:u3vPF~A}~P~VЉVPHAFPFPlFvFFFFv tv\tFv t\FFFvFPTvF\uF tNNɋFVC;sFFmFV;sNv t FV;uvPFP4&P$ F tvFPvD%P[F@v P PvDP vVPvDP; tvVPvD P  tF]v]Uv4vv tGvFPF~.u%~!}]ËF tNFvF묋Fv]UFN t*vFvvFFvF̋]UX~s]øFvFv؉FN uvFFFFv؋FFFF;FrF;Fs.FPFf^VFPFf^Vv փ}FʋF;Fw.FPFf^VFPFf^Vv փ}NʋF;Fs+vFPFNf^VFPFFf^VSFPFf^VFPFf^Vv փ~%vFPFf^VFPFf^VjF;FvNF;Fv Verify the copy (Y/N/A) ->Yes No ABORT copy to drive -> Can't copy a file to itself to drive -> Can't copy a file to itself rError opening input file '' rOutput file exits. Delete (Y/N) --> ABORT <== Aborting copying No - copy omitted Yes wError opening output file '' Error allocating space Copying -> : Copy aborted Verifyingr Error opening file for verify ''  Verify error I/O Error occurred Done Erase Tagged or Untagged files --> ABORT <== Aborting erase function  <== Illegal response! Tagged Untagged Query for delete --> ABORT <== Aborting erase function  <== Illegal response! Yes No Delete file (Y/N/A) -->  <== Illegal response! File -- ABORT <== Aborting erase function Yes No DeletedNo -- deletion aborted YES - Deleting file-done Too many files. Terminating search. CWEEP version 1.30 files, using bytes (K) -- bytes free (K) From P.D. SIG Winscombe House, Beacon Rd.,Sussex TN6 1UL [A] Re-tag '#' marked files [M] Mass copy tagged files [B] Back up one file [P] Protected mass copy [C] Copy file to drive [R] Rename a file [D] Delete a file [S] Sort directory [E] Erase (un)tagged files [T] Tag a file [F] Free space on a drive [U] Untag a file [H] Hexidecimal display [V] View file on screen [I] Print size/time for file [W] Wildcard file tag [J] Jump to a named entry [X] Exit program [?] Print this message [L] Log new drive/filename [Z] Change subdirectory [-?], [+?] List other help messages Commands when prefixed by a '-' [C] Copy file to a new name [H] Hex dump to screen with page pauses [O] Output a list of tagged files to a disk file [Q] List tagged files [V] View file to screen with page pauses [W] Tag files not matching wildcard Commands when prefixed by a '+' [H] Hex dump to screen and printer [O] Output a list of untagged files to a disk file [Q] List untagged files [V] View file to screen and printer Tagging file - ( total) Log in drive and files -> :*.*Rename to or * -> *Error renaming '' to '' File '' renamed to '' Error in processing new name Rename files matching wildcard -> Illegal file name given: Rename files to -> Illegal file name given: Rename '' to '' (Y/N/A) -> ABORT <== Aborting renaming Yes Error in renaming Done No Free space on drive -> Free space on drive '' is bytes (K) Change directory -> Illegal CHDIR command; no change made Subdirectory changed: Error in sort order in compare '' Sort order -> ndse Choices are: [N]ame [E]xtension [S]ize or [D]ate. Prefix with '-' for inverted order Jump to -> Illegal file name string List untagged files [More] Wildcard matching ->Wildcard not matching -> Illegal file name string Tagging No files tagged files tagged, using bytes (K) Output untagged to -> rOutput file '' exists. Delete (Y/N) --> No - omitted Yes wError opening output file '' :JanFebMarAprMayJunJulAugSepOctNovDecView with paging with printerrError opening file '' for output Use or to abort, any other key to pause/continue [More] Hex dump with paging with printerrError opening file '' for output Use or to abort, any other key to pause/continue =[More] Addr 0- 1- 2- 3- 4- 5- 6- 7- 8- 9- A- B- C- D- E- F- <<>> : = con: TOO MANY ARGS$wac ABORT:-$ -- use regular abort for other info!! $ALLOC$ $ NO CORE$FREE$ :qsort failure :\ʚ;@B'd 0123456789ABCDEFCONCONAUXAUXPRNXA 6: r cweep.doc CWEEP version 1.30 File maniulation utility for MS-DOS 29-June-1984 CWEEP V1.30 Copyright (c) 1984 by Gary M. Berg 5850 Duncraig Dr., Apt. 806 Dayton, OH 45426 CIS 70106, 1624 This software is released to the public domain and may be freely reproduced and distributed as long as such is not for gain. The author provides to warranty of fitness or accuracy of the software. CWEEP was inspired by the CP/M utility SWEEP. CWEEP provides the same capabilities to a Z-DOS/MS-DOS system user which SWEEP provides to the CP/M user. This program does not attempt to provide all of the capabilities which the NEWSWEEP programs do, but provides some additional extensions to provide capabilties which I have found useful. The following is an alphabetic list of the commands provided in CWEEP: sp/cr Advance to the next file in the list. A Again. Retag all files which display a "#" in the tag field. Used for copying a set of files to more than one disk, or for deleting a set from a disk after they have been copied elsewhere. B Back up to previous file in list. C Copy a single file to another dirve. Asks for destination drive. Form is d[:[v]]; specifying "v" will cause the copy to be verified. Examples: b Copy to drive B: b: Same as above b:v Copy file to drive B:, and verify the copy afterward by re-reading the file and comparing the resulting CRC with the CRC computed when the file was read from the source disk. In all cases the date/time will be correctly copied to the output file. This will NOT support MS-DOS 2.0 subdirectory names. Page -1- CWEEP version 1.30 File maniulation utility for MS-DOS 29-June-1984 -C Copy file to another name. User must specify a complete output file name. Asks for verify or not. D Delete an individual file. Asks for Y/N to confirm. E Erase all tagged or untagged files. Optional file by file confirmation is available. This option is more robust than the corresponding option is SWEEP V3.8; the user must specify [T]agged or [U]ntagged. Otherwise, the input is ignored. F Free space on a drive. Note that this is a different letter than in SWEEP. Will give correct results for both Z-DOS 1.1 and MS-DOS 2.x. H Hexidecimal dump of file to screen. -H Hex dump of file to screen; pauses at the end of each 256 byte segment. +H Hex dump of file to screen and printer. I Information. Prints size in bytes and time for file, since there was insufficient space on regular prompt line to display this information. J Jump to a file in the list. Works if list is ordered by file name or extension. Examples: S Jump to first "S" or extension blank. A.BAT Jumps to "A"'s or ".BAT" extensions. Jump positions you after the matching files if the list is sorted in inverse order. L Log in new drive and files. Can specify a wildcard to match or just a drive. M Mass copy of tagged files to a specified drive. Drive is specified the same way as for copy command, and may include the verify option. -O Output a list of tagged files to a specified disk file name. May specify "CON" or "PRN" for name; will query if the output file should be deleted if it already exists. +O Output a list of untagged files the same as "-O". Page -2- CWEEP version 1.30 File maniulation utility for MS-DOS 29-June-1984 P Protected mass copy of tagged files. Same as "M" but will ask if a file should be deleted if it exists on the output drive. -Q Provide a list of tagged files to screen. +Q Provide a list of untagged files to screen. R Rename a file. Enter new name. If new name is "*", will ask for an input wildcard, and a new wildcard for renaming those files, as SWEEP does. S Sort the directory listing. Can sort by name, ext/name, size, and date. Lead in with "-" to sort by inverse of whatever. Date is great for copying off what you last changed. T Tag a file. Marks with "*" in list. U Untag a file. Removes "*" from list. V View a file to screen. We use Spellbinder for out wordprocessor, so the view option throws away all line feeds, translate and to a when displaying on the screen. Normally, this causes no problem with text files. The display can be paused by pressing any key except or ; those terminate the view command. The same choice of keys can be used to restart the display. -V View as above, but pause every 22 's. +V View to screen and printer. W Tag all files matching a wildcard name.ext. -W Tag all files not matching a wildcard name.ext. Z Change an MS-DOS 2.x subdirectory name. When I saw how simple it was to emulate a CHDIR command, I put it in. Note that you can only be in one subdirectory at a time on any given drive, and that there is no way to copy from one subdir to another in this version. ? or / Print help list. Re-prints the informational message printed by CWEEP at startup. If preceeded by a "-" or "+", will print a help message for all command which are prefxed in that manner. As an interesting note, control-P and control-N work to toggle printer echo on/off, since this program uses the BDOS Page -3- CWEEP version 1.30 File maniulation utility for MS-DOS 29-June-1984 calls to do all I/O to the keyboard. This can be disconcerting if you aren't expecting it. It also means you can get a listing of exactly what you did, and get crude directory listings sorted by all of the list sort orders. I wrote CWEEP because in our company we were unable to consider moving our users from CP/M to Z-DOS without some such capability. It is written in CI C-86, but does not use in of the CI I/O subroutines. The disk I/O routines came from an "unknown" user on the Programmer's SIG [72155,1402], and the CRC routine is the one used in YAM. CWEEP will not support I/O re-direction except as provided directly by MS-DOS 2.0 for the BDOS calls. Obviously, it can be confusing to try and write redirection files for a program which is so terminal interactive. Page -4- FIND.COM is a simple to use but fast and effective way to search the catalogue files for any desired subject. To use it type FIND space catalogue file name space then wors(s) to search for. It also accepts wild cards, if you want to search all the catalogue file on the disk for 'BASIC' for example, the command would be FIND *.CAT BASIC. FIND.COM 03/18/80 $Z ܉]< u5++NO FILE NAME++$ȵBطC u{< uC}sQRS\[ZYu 0[T]He< ----> FILE XXXXXXXX.XXX x 0<:u0KxQSv[YC<uc< u C QRS [ZY t $<t$QRS[ZYû}ڋS<_u B t9<|t5:Ct[" QRST[ZYC< u^VQRS9[ZYC uC^V++BAD STRING++$CBI uÊC7CC/ uRCCSC?ذRSQRS[ZYZQRS[ZY [u؊u[KKKKKCNJ*؊Ŋ<tIK/KQRSu[ZY2h|= u4=\> ;\J>\ )QRS\5[ZY4J\ QRS\[ZY>\ QRS\[ZYt-$طSK [] 2h:t[u [àZ< t ++ABORT++$Z $\arMZw; rE EEOU3F~|P;VP;P;P;P;P;P;P;JPy;[Pn;Pc;PX;PM;PB;P7;1P,;eP!;P;P ;P;P:P:=P:\P:P:P:P:P:#P:UP:{P:P|:Pq: Pf:8P[:bPP:PE:P::P/:]ÍP Pv4Z9P? PPP>9P?v4vv uvP3vvPP2 t+F tvPFP PtDvFzvBu fvWu3SvNu3@vKu ,v-u v/uvP5PCF F t NPCFPFMtPFPFPFPFP- FPtPFPFPcFPFP |s wFPFPaFPFPTKFPdP C9=A 2Iv I oI3]U3F܉FމFF;F|tPPvF46tPtPP63PtP8F؉Fڋvڊ t& ttPPV7v4Bvڊ t8FދFPv.F܋Fڋv܋VރvFڊ tF33FFH;F~rF@FF;F}]v܋F4v܋F4N? ~6v܋F4vڋv܋F4~܋F5Fڋv܋VFF3FFH;Fv܋F@4v܋F4> tPv܋F4> t Pv܋F4> t2FFFH;F~v܋F@4~܋F5FNFYF t P@Pa3FF;F}vv܋F4eFދ t66vV  t$6vVOvv6636vV%P]U@3FPv)F t tvP4]vFP~833҉F͉V3FՍvVvVvY u6W:FV6vV0  tbFPFP= tFFPFP< |46vVHvv6669FV댋F t, tvP 4Pvv6-4) tvP33Pvv64 tvP36_9FV6vV vV6v13Pvv636vVW Pvv63v7F t%FPp4 t tFPP)3]U 3P F tw6vV  tc3FFF;F}'vF4FP tFFыF tvvVHPvv62!6vV  tvvV3P]UfF t#vP)PO2v656q]Ë tvP4P$2 uIPvP&F uv5vPLP1 tKmP163dPFP'vPj+vvYu vNu뮍vNu)vPPv1Pvtt 61]ÍPvP%F t1 tvPP+1Pvtt 651]vv66vtvtvv4]U 3P} F tt6vVM  t`3FFF;F}'vF4FPX  tFFыF t vVEPvv606vV t vV3P ]UhFPvPPa/PFP8 tWPFP{8 tDPFPh8 t1 tvPP/Pvtt 6/]ÍPFPvPP.P%$F tFPPZ: tvPP[/)P_1Fvv6p v2*P3vv4v+FP90 t tFP3P.]U"3FP P33RP6.6^4FV3P3RP6.~|66/ t6'tPEPm.F6& uu6PPvV$6PPvVi$63FV;V|u;FvFPmP-F,vV3P6  tFFPP-~~ P-"F tvލP- P-]U F t PM8P6vV u3FFF;F}'vF4FP  tFFыF t-Pvv6- tFP P,"6vVvv66[36vVP ]U ! P, t 8 Pu,S Pj, t _ PW,m PL,o PA, t  P., P#, t  P, P,3PF tr6vVt t^3FFF;F}'vF4FP tFFыF t vVWPvv6+26vV t vV#Pvv6t+3P]U vD %FvD%FvD%FvD %FvD%?FvD%FvttvP P* uPN P*V P*I P*< P*/ Pw*") Pj*0|;;HUbod3ҋv\LQSd3QSvtt x![YQS [Y+RP2 P*vtt < P*dPFP[R6FH4vC P) t7vt~ ~paPv~ ~F FPP P) c P)]U j PPPe P(P tPl P74PF u6vV to3FFF;F}'vF4FP tFFыF t vVi"6vVvv66#6vV9 t vV$36vVmP]U PPF tP P43 tvP P5(vv6X3P3RPv6(6-FV6vv6v3Pvv6'6vPvtt 6'v]+P( t tP Pz']U FF t3]v' t3]vtNFN tP P2 tP P'v' t  P1vd }P3 P1 u3]Ê~=v PPFPPFPP P& Pz&P"u.vPPvvD TvDTvPPvw]UvP.vP. t]vPPv(vD;~vD;u vD;~vDvD]UFV FV t%vvP4.u  PG0Nj]UdF u P P u6(3 P P% tK P$63dPFPvPvvYu vNu뮍vNu  P/ P% PP& u64( PP t PP P5/, P P t P/ P /O PP tPR P.:Pp P# PPr tP P.* PPF tP Py.]UF t9 t 6/' t  P$666#6&]Uv)v(v t v tmvPvZ;tRv?tGv*t3]Ëv tv.tFv tv.tFFF}]UF%6V^3Ӂ3]UWFvFvVV%tv P@"FvFv]Uv,WFv4FFFFFvVVr%tv P!]UvD]U3vD T3Pv Ftvv&vFtvvCvv1FtvvWvoFtvvz2vJFtvvV tvP P  P Pvtt v ]\&MMovD;t  tvPA Pq ]3]UFP6F tvFP(u c P+]UPwF0=u vF%P]ÊF%tNF%tv6o vP^3]6{ P* U%<]U t]Áv]U  t  PL333҉FV3[v Ft!FVv3Pv}FV3P3P3RPvvDvDT3;V~~u;Fww;Vju;Fwc;+Uu;+wM t  P_vD TvFtvv& FV;Vfu;Fs_FV;+Su;+sK t  PFVvD TvFtvv|&FV;+9u;+s1 t  PvvM vD TV t  P\++vD Tv9Ftvvv* t  P]U0Pv]ËPz33]ø]øv;u>}ߋP)]ø]ø]"y^j/(]ø]Í P'!]UvzFtv6EF]U3F~}V36V36VD6VD6VDF3F~}33ҍ6'^TFދ]U~uFV‰Ftv6'FT]U33҉FVP3҉FvJPF[3F3F}E6 t)36DVFvPvP#'6#3PGu^3++}?6 #RP6't43XZ^Nʉ^N빸3RPFVRPbXZFV>#}3#F^Nʉ^NFV]U3FFF~}F;v]Í6F>F;u-6F>FE;D~]3]U F~vFvNFvFHP3PvvFV‰FFFvFvDFvD6F6Vv6Ft6Ft+@vDFHP3Pv&v#]UF;F~FF]U3F~}36 #VF]U6FDF6FDF~uI~uBF6 #V '+^#6 %V~~3]Á~t0VЋ '#Љ 'vF@PXu]Á~t.V ' Љ 'vF@P#u]3]U >#}3#FvPPvV3F#FF;F|6FDF6FDF~}F@#+FF~}F@#+FFvPPvV+vPPvVFNhF]U3FF+;F|D~uF]Ë++VV ЉVF++F)+F%]Á>+~++VV ЉV+)F>+u3+~uF]vh+u+6 %++6 #++*Uv*FVvFt(vvu  PFVNjFV]UF0F 3҉FVvvvv XZFVFVRP3RPXZ%]U6#;FDF tFFF]UF0PvrF6#;F tF]vFe%F#;PF^vv t FF=u3F#;FF֋FP6#;FXDF]Ë]UF0PvF tW#;PF^vvD;FuF%vT;uF]ËvD t]ËvDF뢋]U3P`P#;P3F~svPF++]U#;PSvvZ^vv3vDFvDFvD]U>+uavFu]Áfv+u]Á&+F%+‰F&+6vFu]Áf+%FF+F]U>+u vF0PMF%+:v+%VPvF0P+]U++F tvFP1u PD]U>+tv+%P]UF6!+6!;!;!;=| P]U>!;~6!+!;!;%]ø]Ë]U3!;#']U' t03'v)6#;)D%+]Ë!; tvFFu]Í#;PF^vv t$)F#;PF^v6+vDt-vD0PvDF#;PF^vȋvD%+P# t6+6)#F)]Uc#'33҉++]U' tFPP%3']ÊFP6%Ft F%]6%v)# tFP6%#FPPJ%]U6%vv]Uc-vPP61V >1}>1| -P6-6-3FF;1}HvPP6-FPvPP6-FP{F믋]U3F~}--~Bve/u]3-6-F#/‹F06-FR//Z#‹FtF@؉F~uFF]U3FF3Fv%uvF0PbFދF tFNȋF tFF tFN룋F%tN F%tN+awrb4100000FPM3PFFPvF~t~u>yt*PFFPvFJ1=1o1=1~u~tP33RPv*~t69F4Ƌ]3]U3FFH;F~0v{F~uFvVF0 u3vvF tF]3]Ë]U3FF;Fs>vvv PF tF;FtFFVЉVF뺋F]P2 PPPSQRVUWFVv~u y ؃ y ރS 3SN;w r;w+@N^Yt tu t؃FV_]^ZY[XUPRF fF FfF FfFV ZX]U3FF@%FF tovDFvV+ЉV6{vF tvD;Fs v4vF t%F;FtvFPFPFFvF tTF;FsFFF tF;FtvvFPKF;Fv3PF+FPFVP F]UF0PvA]U^u% u,G;G}5w@2G<tQ< tX]À'G2]SY=t^S?O W_![rK=tGGG GG tO.tuSl=t'< tO 끀@G]UvVFFVFFFFFvVV%t]3]U^7CC_^ZY[X!WVRQSP^ 6CCX]UFa|FzPZFˆFF]UX tMP PP'FFvF%FFN t&v0 u v0 u3vF3vFFFvF%@FFN t@v%t-FvVF~ |v%tFNF3vV>vPP 6936363D63D 363D63DDFFvVVQF%t;PP6;56565D65D65D EFFvVVPPT6;56565D3RP65 RPXZ65D 65T +‹65D F65D65DPP6=76767D67D 67D67D~ |P\PP*PkvFPvǃP]U3F~ }69F4 t vFvr]UFFv;tmP PPA{FFv4v tF;FwFFFF܋F;Fu믋v4~5Fv{;Ft4FVvT;u!vDvDvDv4~5 FFFFF t2FVvT;uvDvDvDv4~5VvT;uF3v]U3PRPvvi~3vF0:u&3F~}vF%vVF߸F\Pv3 t/Pv  tu3Fv0\t8v0/t,~A} FF}v%vVFF뼋v0/u v%\vVFFgCFv%t-v0.t!~K}v%vVFFɸLFv%t!~P}v%vVFFՋ]U\PvFPvz3vv%tF\Pv)v%tF\Pvv%tFC\CPvv%tFL\LPvF]UvVv65^PsMPz ]Uvub$ t V=tJF VN<t <t<t7ڋDDʋӰB\!3ɉLLLI#ى\ A+ˉL ]DxD @Ћ]Uv%tvDvD0u]Ëv~E;Dt3]øDFvDFvVV%t@v ЉF%yF%t5]UFFAFvVvVV.%t]3]U@3FFvVFFƋFFčvVP NFvVV%tQFP F@PvF u3]ÍFPFFPFP{ @VЉVOF띋F@Pvi]UV t3]ÍvVFFv)  t&vF0:uv0PZA%FP? %FsPFP FAvGFFvVV%t3]ÍFP @PF t3]ÍFPvF]U3FF;Fs-vvv gPv;FtFVЉVFˋF]_ȎX& A&5؎UPRQFV N v FV YZX]U؎~NF]UߎNj~33Iыv~tF]U3Fv% tvCuF369~U>FvDFvvVVg%tF%y]ËF]U7FvVV3F%]UFv{~H^`^V^V%t `=@sv|}%}wP|Pv|PzP|PfV 3n|pjr|P+F t%3PjnVjvd FvuF]U t]ÍvVFF;FvVV%t]3]UP33RPvn]_Ȏ[&+&;]r&aUFFv%t-v0arv0zwvЈFɋF]U*3FFv:uHv0:u93Fց~}vv֊0PYvvֈF3vFFFF t#t)FFF;sFFFFFF=V‰F3FFFvVvVV%t%FFFFDFvVV`%tF%t]F%t3DFFFF% FvVV%%tF F%tF%tFFF3F܁~ }69F4 tF߁~ ulPFރP F tPF@%vFދvDvD FvDF܋vDF69VF܋]ËF%yF t v-F t&>FFFvVV!%t F%yF t vE]UߎNj~33Iы~vtututH@]UF^' t;~ twF@GO;O }P]tS P=t ^ˀ t'tcSPPPS=tP[ 떃u w!S@OW_![r%;u3GGG GG 'ߋF]GwG@] !P ،&;v+߁;sǾ;s+;r;vߋ+=v+Y׋3UQW0! u2[t[X+؉J!s +ۋPÿ+3PUv% t v EFvDFvVV%t@v Љ(FF>FvVV%t @v Љv%@t3]UP67 vVv67i PsMPP67 P[]UF t(x t"PV) ! t 9nvnX tL!6,±$'@'NuU؎v~N;rNO]UfV!]Uv%t"F%vF;u NF]3]Uv vv69F4]U~v3]ËF@%FFPF+3Z;s3]ËFFЉF]UߎNj~33I-+]U69F4)]Uv%uv0%tAFFFv%tv0%tF+F3PvvvփFFFFv0-tȉF tFv%F~0uF Fv0*uv F FF53Fv0P  t FvF0‰FЋv0.tȉF tXFv0*uv F FF53Fv0P  t FvF0‰F3Fv0PltȉF tFv0PPF tFF Fv0PvbFPvFV9 FFF MFF FFFF tBv0As t t!v0Zv t t1FF t!F FvFTFVFF ,~}v F FVv F 3҉FVv捆bPvvWF ubFFV usFvFF tBF@;Fv9F@PFV@V+Pv0PF@+FPvF@FF@PFV‹V+@PFV‹V+P.vV+VbFP\FF FvF4vV<FFF F tF;FsFF3FnF F FF3FVFFF3FCcsdDxXuUoObBgfeYLALLJJzJzJrJrJjJjJbJbJJJJF t^F;FvVF t/v0-u#~0uPFFPvvփNNFN;FvPvVvvփF;FvF)F3FvvvvփF t&F tFN tPvVvvփF]Uv sD拜9 t8u3 uNvt/2QVSP=t^YF]øPPj PIG +G;+ȑPS@O W_![r];uSY2W;|J#+PS@_![r8;u.Y O 'GGG GG F]GwG@]À u&'tSPPPS=t[ U~v3]ËF@%F{Fv4v tovD;Fr[FvT;r6v4Fvv4~5vD+FvDFv vDFv4~5 FFF tFPF t7FvFvDFF;Fv3PF+FPFVPF]U&V^F K_ּW!r3 ڜZ&R]UF3RPF3RPGXZFVFVruv3FvF t3Pvv<F]U64,P F3Fvv %uFFv%t$v0Pvv %Z;uFFҋv%tyvFFP 0=ubFFvFFP %tFV+PF t(FFvFFPM %vF%tދF]vFFP$ %t3]Uv sT拜9 tHuCN#tJ~2QSr!=t = t YF]tYIYF+PP PgG u;O|+G;} tSQS4Y[=uy~uWtww+ȸGG)NWJ#+8PS?_![Yr-FQWGP=tF]PGIX'띋؀@G]UvD]U3Fv%tF%v;uFFF؋F]UߎNj~33Iыы~3IOtF]UvVvvvPsMP]Ët T\DUv@\LT!r;uLLD )D $ߋ]ÈDDw @]UF00s t tF09v t t1]U3PvVFF0et ukF0gt tGF} t uF~ t u1 t t1 t u1 t uF} t u1F tF FFPvV VЉV~|FF PvF tFPv FP9^vF uzEvF~}-vFF؉F +vF PvFRPF}+F@PF+FPv[0P+FPv75F0gu+Nv00u 3vv0.u3vv ]U3FvVXFP@ ~PI X tFP:hFP F3FFP~P X t~}3]ËF t\~~FPFP NF tPFPP ۍFPFPxP FPP" X tk FFN tXVV62FVPFPIX t'6|FV.FP'"P FFPPX u FFN tXVV6|FVFPVX t'62FVFPPN랍FPPX tPtFPmhPUN3RP FP@FFFFv%-@vFP%FPPFP PX tFPPnX t3PvVpVЉVF t FPFPvVF]UF FFP~P X tFPzFP_-vF~}G0vF.vFFF~} F)F3FFF } 0vF`FP XZF0vFPFPFRPFPNF t벋F t .vFFN tDFPXZF0vFPFPFRP+FpFPZ3vF+F 3ҋ]U*3FVփ!V~ |FVusFFV؃FV63RPF RPvvXZ؃RP3XZ%NvF ؙRPvvpXZFV t\FVFV63RPF 3RPvvHXZRPXZ%NvF RPvvXZFV t밋F t -NvFփ!+F3҉F@PvvF]PSQRVWUfF]_^ZY[XÃFFvDFDFDFFUFA|FZ PZFˆFF]U@NV!r;u]øUv&]PSQRVWUfF]_^ZY[XЎW_E %E%] VW_^D %  DEËE E E E uE6E tm ]]]]E ueUUU )]UF tv ]= vHF%1FF0CP3PPPpF^ t؉F v F%1FF0CP3PPP2FV^ t؃FVv! vFtF uv~vv~~D+EtyEȻYKKyً3x CC%CCE y3CC1Wp^~NF uF vFVvF33SS0vFV vF3SS y ؃πvRP0CPS~F tFuv~vvzv~q3SSSSSS_z^ ^ . t.] .]CCsCCtڋF-0@FFދF3FF܋[~8" " " " Fuv~F uFFF F ~ v[Y3PPPPQS v5Qv~;rwNNOOv~FFGGvFFYċF-?)FF1F~v~[ &nv! y2y:}!ĹR9u NN$t w$t$t2 F ~FFEFEFE~iFFvD3۹%u؋8FV^F;+~FVt^^Fxu=Ff ~F%-?=}#=~)F-8yV^F 3~EARC - Archive utility, Version 4.20, created on 07/16/85 at 23:03:56 (C) COPYRIGHT 1985 by System Enhancement Associates; ALL RIGHTS RESERVED Please refer all inquiries to: System Enhancement Associates 21 New Street Wayne, NJ 07470 You may copy and distribute this program freely, provided that: 1) No fee is charged for such copying and distribution, and 2) It is distributed ONLY in its original, unmodified state. If you like this program, and find it of use, then your contribution will be appreciated. If you are using this product in a commercial environment, then the contribution is not voluntary. If you fail to abide by the terms of this license, then your conscience will haunt you for the rest of your life. Usage: ARC {aumdxerplvt}[bwn] [ . . .] Where: a,u = add files to archive m = move files to archive d = delete files from archive x,e = extract files from archive r = run files from archive p = copy files from archive to stdout l = list files in archive v = verbose listing of files in archive t = test archive integrity c = convert entry to new packing method b = retain backup copy of archive w = suppress warning messages n = suppress notes and comments NOTE: All files must be in the current directory of the current disk, though the archive itself can be anywhere. .ARC.BAKAUMDXEPLVTCRCannot mix %c and %c%c is an unknown commandI have nothing to do!I don't know how to do %c yet!*.*X:\No files match: %s I have no work to do!rbCannot read file: %s Updating existing file: %s Adding new file: %s Adding new file: %s Cannot unsave %s File: %s Extracting file: %s rbWARNING: File %s already exists! Overwrite it (y/n)? %s not extracted. wbCannot create %s XX.BATX.COMX.EXEFile %s is not a .BAT, .COM, or .EXE $ARCTEMPwrbUnable to create temporary file %sInvoking file: %s $ARCTEMPCannot unsave %s %s is not an archive or is out of sync Archive truncated in file %s File %s is okay More than twenty errors detected %d errors detected No errors detected You must tell me which files to delete!Deleting file: %s Name Length Stowage SF Size now Date Time CRC ============ ======== ======== ==== ======== ========= ====== ==== JanFebMarAprMayJunJulAugSepOctNovDec%-12s %8ld -- Packed SqueezedcrunchedCrunchedUnknown! %3d%% %8ld %2d %3s %02d %2d:%02d%c %04x .TMPrTemp file %s already existswrbUnable to create temporary file %sConverting file: %s reading,Cannot unsave %s %s is not an archive%s is not an archive, or is out of sync Archive length errorInvalid header in archive %sI don't know how to handle file %s in archive %s I think you need a newer version of ARC. Write fail (disk full?)rbWARNING: Backup copy %s exists! Delete it (y/n)? Old backup not deletedrbCannot rename %s to %srbCannot open renamed archive: %swbCannot create new archive: %sCreating new archive: %s abCannot create archive: %srbCannot read archive: %sGet timestamp fail (%d) Set timestamp fail (%d) I don't know how to unpack file %s I think you need a newer version of ARC WARNING: File %s fails CRC check Write fail (disk full?)Bad NCR unpacking state (%d) analyzing, storing, packing, squeezing, crunching, done. Bug - bad ncr state Write fail (disk full?)Write fail (disk full?)Stack overflow File has an invalid decode treeNEEDS DOS 2.0$ TOO MANY ARGScFREE$ :\C COMSPEC NO CORE$ ABORT:- $WRITEREAD @AAŁ@ Aρ@ ʁ@  AAہ@ށ@Aԁ@AAс@01A3@26@754A<@=?>A:;A9@8(@)+*A./A-@,$%A'@&"@#! A`aAc@bf@gedAl@monAjkAi@hx@y{zA~A}@|tuAw@vr@sqpAP@QSRAVWAU@T\]A_@^Z@[YXAHIAK@JN@OMLAD@EGFABCAA@@$@Y@@חA7yACnF?O8M30HwZ?sOu?{Gz?-C6?:0yE>ؗҜ<2#I9,, where PREF is a 2 byte pointer to another entry. SUFFIX is the last byte of the string. Representing the PREF's as pointers rather than values speeds up most operations in NARC. This idea came from Bob Freed. One obvious benefit of crunched files is the fact that there is no need to include the encoding table in the compressed file as was the case with squeezing. Another great benefit is the fact that crunching is a one pass operation as opposed to the two pass situation in squeezed files. Page 14 Crunching begins by creating an "atomic" table, that is a table in RAM that contains 256 entries, one for each character in the extended ASCII set. The values range sequentially from 0 to 255. The table entries are arranged as follows. Prefix Pointer (2 bytes) and Suffix byte (1 byte) In this inital table setup, the Suffix bytes are the 0 through 255 mentioned above. These are the "atomic" characters, in that they must be in the table before curnching can begin, since all files contain some portion of this character set. We do not know which characters will be included in any given file and which ones will be excluded, so we must include them all in our initial table. Once this table is set up, we can begin crunching. The Prefix pointer will contain a value that is a pointer to another string. When the table is initially set up, there are no other strings, so this Prefix pointer is set to a special "Null" string, that is it points nowhere. We must be careful when crunching the file, to look for this special pointer and act accordingly when we encounter it. This Prefix and Suffix business is used to "build" long strings. If we read the input file and found that the first character was the letter "I", we would look this letter up in the string table by hashing (computing an address). If we found the letter in the table (which we certainly will on the first character), then we ouput it's "hashed" address as a code to the output file (the crunched file). Suppose then, that the next character input from the file was the letter "D", the cruncher would then look at the I and the D together to see if they exist as a string in the table. Well of course, since this is the second character of the file, we know that it doesn't, so the cruncher forms a new entry in the string table. This entry has as its' Prefix pointer, a value that "points" to the letter "I" entry in the table, that we made a minute ago. The suffix byte in this case would be the letter "D". Now another code is output to the crunched file, representing the letter "D". Well this is great, we have now turned 2 bytes from the input file (16 bits) into 3 bytes in the output file (24 bits). You are correct, crunching begins by "not crunching", but it is a crazy world ! The real value becomes apparent when we run into this same sequence "ID" in the input file again. Now we will find an entry for it in the string table and we can output a single 12 bit code that stands for "ID", thus saving 4 bits. The cruncher continues "learning" strings like this until the file is crunched. It should be noted that the string table is dynamnically changing as the input file is processed. NARC supports all of the current "skrunching" algorithms. A brief description of each follows. Page 15 Version 1 - "STORED" File is simply stored (obsolete now, 25 byte header) NOTE: Files stored with this version are rare. Version 2 - "STORED" Current version of simple storage This version was implemented with the implementation of file compression. The main difference in version 1 and 2 is the ARC header (see header section below), version 1 has a header length 4 bytes smaller than any of the rest of the storage methods since in version 1 there was no need to store the original file length separately from the stored file length since they were the same. Version 3 - "PACKED" Repeated bytes are packed into a three byte string (see Packing above) Version 4 - "SQUEEZED" after packing The file is first packed as described above and then squeezed Version 5 - "CRUNCHED" This is the first implementation of LZW released Uses fixed length codes and a complex hashing function. (obsolete now) (See hashing below) NOTE: Files compressed with this version are hard to find. Version was released only one month when next version came out. Version 6 - "CRUNCHED" after packing The file is first packed and then crunched. Uses fixed length codes and the same hashing function as version 5. Version 7 - "CRUNCHED" after packing Same as version 6 except a faster hashing function is used. NOTE: Thom Henderson (author of ARC) has this to say about version 7. "This approach was abandoned because dynamic Lempel-Ziv works as well, and packs smaller also. However inadvertent release of a developmental copy forces us to leave this in." Page 16 Version 8 - "CRUNCHED" after packing Uses variable length codes in the crunched file (9 to 12 bits) and has a faster hash function (actually not hashing at all, but for the sake of consistency, we will call it that) This version also resets the string table when it becomes full which benefits the compression ratio of larger files. This resetting is commonly called an adaptive reset. Version 9 - "SQUASHING" (variation on crunching scheme) This version uses the same hashing function as version 8 but varies the crunching codes from 9 to 13 bits. There is also no packing, which affords the string table the opportunity to "learn" longer codes and thus improve the compression ratio (benefits "real large" files). ARC file header structure is same for both DOS and CP/M Byte number Value(s) Meaning 1 1Ah Header Flag 2 0-9 Compression Version 3-15 --- ASCIIZ compressed filename 16-19 --- Compressed file size in bytes Low Word, High Word with each word in LoHi format 20-21 bits DOS date format 15-9 Year 8-5 Month 4-0 Day (all zeroes means no date) 22-23 bits DOS time format 15-11 Hours (military) 10-5 Minutes 4-0 Seconds 24-25 --- CRC-16 in LoHi format of uncompressed file. ------- This is important. 26-29 --- Original uncompressed file size NOTE: Version 1 files are not compressed so the length can be found with bytes 16-19, also the header len for version 1 files is 25 bytes. Page 17 Hashing..... Hashing is simply an arithmetic way of coming up with an address in a table. You have a set of input numbers (codes) that will map one-to-one with the output codes in an ideal situation. That is, each time you input a certain number, you can rest assured that the output will always return the same output number. This is not quite the case in the current versions of .ARC files. The reason is that the algorithm would require a MEG or so of RAM for implementation. The utilization of a smaller string table in all of the ARC programs introduces the possibility of producing the same output number for 2 or more input numbers. This is called a hash collision. This is handled separately in .ARC files with what is called a "collision table", which helps to locate the correct table entry. There are three versions of "hashing" used in ARC files. Hash1 - Key = upper 12 bits of lower 18 bits of unsigned square of (prefix code + suffix byte) OR 800h Used in stowage versions 5 and 6 Hash2 - Key = lower 12 bits of usigned product of (prefix code + suffix byte) * 15073 Used in stowage version 7 Hash3 - Key = next available address in table. Used in stowage versions 8 and 9 CRC calculations - NARC does not use the traditional table lookup method for calculating the CRC of the file. The table approach requires the table to be in RAM and takes up more space. NARC calculates the CRC on the fly, which requires no table and saves space. The algorithm is taken from the definitive article by Aram Perez in IEEE Micro, June '83. The polynomial is X^16 + X^15 + X^2 + X^1 which is not compatible with the Xmodem CRC. Gary Conway Page 18 ARC RELEASE DATES AND VERSIONS These are the various versions of ARC.EXE that I have and what versions of storage they supported. PKxARC supports all of these methods as well since they were all originally created by ARC.EXE. Date Stowage Methods Released Version Supported 05-01-85 3.10 Storing,Packing,Squeezing (1-4) ( version 5 in here somewhere) 06-26-85 4.10 Up to version 6 of crunching 11-18-85 4.50 Up to version 6 of crunching 12-04-85 4.52 Up to version 6 of crunching ( version 7 in here somewhere) 01-21-86 5.00 Up to version 8 of crunching 01-31-86 5.10 Up to version 8 of crunching 02-05-86 5.12 Up to version 8 of crunching 10-24-86 5.20 Up to version 8 of crunching This list is compiled in an atmpt to start sssome kind of historical record as to what transpired in the ARC world. I would be interested in hearing of addtions. NARC.EXE REVISION HISTORY Version 1.0 - First Release 6.10.87 Version 1.1 - Fixed bug in tagged extraction to other than default path - Deletes partial file when extraction fails due to lack of disk space - Fixed bug dealing with improper end of file condition in HEX view - Stronger ARChive header checking. Handles special case where two 1Ah bytes are encountered after a bad header - Fixed bug with PK zero length files - Introduction of NARCCFG.EXE, replacing NARCLOAD.EXE and NARC.CFG End of NARC.DOC Copyright (c) 1987 Infinity Design Concepts Page 19 MZ! ==2==+=P$M$$NOppppEnd Config TablesHAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK HAYSTACK ،&20!<s6*L!6"+؁J!r޴H@!rգ H!rɣ  6G> F  FE3F   b>'33ۈ6'> >-؍6HwxG62!!A6>@+&-.&#&6 364&22!";-.@36Z>u>! Z=!s묣  > P > 2  <u<uu3Btt<uBt <t< sr!66M6FGRWVP>06 6T6#3X^_r"PQR  HЃ ZYX;<u"6 tLl2 6> u6 -6--.#36 6 3-.:n6 3-.:\-.3P6 F-# -(<t<te<tJ<u<tL<tM<t?<t6t učp g 'u6:tC'5w눀>t\>t.>t3>t̀>t >t6 (r&R&L @D 4s (oh6-Z .-3P6[ <.!('<t<u<u<t)<tLt uKtMt8 < tX<th:B.f>Z tZ Z .K.?>Z tZ Z .$l->Z t:-AQH!Y3ҿZ 2-Ź G <r]> tBs  6'QS""@'![Y6;uAuڋ  W!>!6_9 u)6; u; u>!ZA!y3Ë6T4?r46u63ۊ˶uu<t>u >t6%ZA!> <6>@ 6>uô;!s62뽍6>Z@6>Z|:t@>Z6/ZN!r<6 x6C8 2-sw-UáP UXU-~i 9t8-.U_9 tP. U AX-U-7h.6P3à"T <t*.6P33V6 & &;6w  ^&> uMSQWRV33ҴB&!& & & & ?&!& H&^Z_Y[ 2뤍> <u xu6bu 6 W6 >g_  R6  R6 6 ZR[Z0 u  Ff +6  ` Ro [  V>P 2>^ÇDGÇ ù )   eUu 323V_6yá  t  kF46 P<rt<t<v< tXjRSlZ_ReUu t dX Ӌ _t m]}VeN+s^ %Fà $ F P%< r22 FXPĹ $at < rp, u SR:F0X? ['333p uXt rPu <tOr>uҜ-P-.367 U Q N YX- n w6   usÍ6 6'N u>u8t  áP 6  T2U6  QV6T<u  L^YUXÀ> u  > r> tA> u  <6"  >'3F u {0ur 2À> u" <6, 33ɍ>' u 0ur 2t\> uC <6B #t6 X6iX233ɍ>'9r 2É&@> t BC<6N > t66 . <sRi<UtKrCDt . ` " u< t6333ù0.B[/ t9.69.A.AD,. > 2EIQ2YQPXu>'.>'&6<6:686664ÐYs2~Su C uq<ruKdlCCSPKRSe[CFSZ[tJ6>K-5CRXtz돇&@É 6 É 6 ËEtCEPQ67[K  C7CXÊ uύ6Et <t "u6DںBC.DtnurC tñ DCB$t2Bu$uWP> -2X_E[6Stu끊ߊu{tDr ؊>CÊ{tQCرYÜPQS&[0uYXr3F468:<aQ3Ҋ ۱YQ3Ҋ:YSZ> uù2S[S*C$ u6eځSzZ tC6PKX[ù>#2# t3QVt^FY2 àW3uTuIآsS#2䠶[_u00urÀ>t t_633 P-P-.P36j.3MX-@ Í6 0" > O PS2[XSQ2Y[33س>u >u0À>0t033 t0 33ҿc2- G> :tu-P.-P3NX-l>tqFi>tKÀ>0t33À>0tø3 3À>0tø3 3ؾþ.!3ɺO" XV&F^ì<t/WVQRPQ3-3ҹ.2—YX&<t. <t.ZY^_û ûû N`v y{/;~ދ5';{tX Pa$aXPa aXPBBXRP4XZPCXÉ}}á; w ; w   :>u>Bt"A>Cu< s< t < t< t Iu@<t;< t< u:srLa:s62D >2<tQ<t{< tJ<t*< r<{s<;t;t2@2ɍ6 t6\2WÍ>@ RQSWP6yXP t/6؋¹360N;r u t t 3D0X_[YZÍ6>@>6!N3!>">r#64_WO!_r 64W6>@>6?._N3!r#64WO!_r 64 36"6 Í6>@>6N!> r1>+u 64KWO!_r>+u64.ᐋ6  36 3ҡ 6 W _>< uÀ < t<t> E.W>4 _À<.u <.tEJ2PO}\t\G< t <t&y<.t <.uF.G< t <tYW\P_2P=\tP+ه˰\;wGGÍ>& &6& Q6& Y6&& >!& &6& Q6& Y6&& !д!3ɊȰAQP6 >8&XY>>QP6W6> &>_XYՍ6 >&>QW&\_ǠY8>3ɊQW &\_ǠY!>QW&\_ǠY@&$0<0t>6$ QVW!_^YVQ"A>Cu< s< t< t < t< t YZ@!Ã>wu>"VQ6 Y^IuìPX>t >uG<s< s.m>u,8sxs-*M$Q(>G0t>G1t>G2t >G3t -ww =6y< t- iVQtArt5º+NV^Nt Y^þVQ !Y^<uM6;3PX[u> r؋6 ;4PV ]^X<t<t6 >tF낋&2,6>@>6 ;!6>@ =Jr>u6>"r؍6"v<t<t6XÀ>1uH>uùd<t <t"<t!<t#t;tZ@>Z6&6Z>@/á 3ҍ6"P &!É6z|~裂>u|+ЉQH6z3~VW6>_^y 5+ȉ>| >tYAB;ufV%d^É6zn|p-P6-.6stxp;|r|-PQV-^6nX;pt0p+Ȋ>-X-P>-Q-Pu63X--YX- >rtw6z-P3uX- }xz<t<tQ<t<tQ<tUt< t;:yu<tʀHt,;t t"x -w9á@;|ràxsKԃ>u> txM -w8àx.돊.stыpnʋpË6znQY-P3BX-Q-Pu3/X-Yá-P-.6O3 6 3@-.63X-PSQRVWs 3PQV2‹ފ2Ê؝zs4 2ƊЊ^Y볉_^ZY[XI6HXY0t:ttPpX<0s<0t$<1t <2t <3t붢GE3U-P.-6,3<t<t6<tg<t3<tJt<t< t<t< tIȀKtMt%X-À>t.;뙀>;t>t>*t.>CtCgC_>BtBPBH>AtA9A1 .>Bt)F.*>At2.;>Ct&à.:u63 à.:u6 3 Í>RWV^_WV u^>Z@3$>Z>EB6 PB26 6Eb$  QRP@! ZYU6W 6E66 6 !L6Bt>&@!A:>R>Dt+>3@E 6.َ&@>벊A!;!!Z>0tg3=uK tL3=t t43s0w r6v >!N!3A!;!I !I !L!NOppppNARC - DOS command processor. Hit ENTER alone to return to NARC You May Also Enter "COMMAND" to Invoke a Second Copy of the DOS Command processor. When Finished, Type EXIT to Return to NARC.YES NOFormat YES Strip High YES Strip Ctrl YES[0] None [1] 10cpi [2] 12cpi [3] 17cpi [ ] of C:\C:\ to C:\C:\*.ARC*.ARKRequires DOS version 2.0 or above. Invalid archive file format Warning: Bad archive file header, bytes skipped = 00000No matching file(s) in ARChiveUnexpected end of ARChive file Hit ENTER to Continue.Extract to dr/path -> Extracting - Not a Squeezed File -Memory Allocation Error.Do You Really Want to Abort (y/n) ERROR: Extraction Failed due to CRC error, Hit ENTERERROR: Disk File Inconsistency. Hit ENTERERROR: Incompatible Crunch FormatERROR: Extraction Failed due to FileSize errorERROR: Extraction Failed due to Lack of Disk Space Already Exists, Overwrite (y/n) ? Aborting Extraction, Hit ENTER Squeezed File Has a Diseased Decode Tree.ERROR: No directory space on destination! Bad Path Name Dude, Hit ENTER 8' Page $Printing Hit Any Key to Abort-Print ABORTED- $ HEX-DUMP TABLE RELCOMOBJHEXDTAOVROVLDBFEXE  SPACE Pauses ESC Aborts???JanFebMarAprMayJunJulAugSepOctNovDecNo Sub Dirs On This Disk F1 - Abort No ARC Files In This Directory F1 - Exit F2 - Chg DirF3 - Chg Drv End of File . .Hit . 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F$ Extract View Print ARC-wind DRV-wind SUB-wind QuitNARC Ver. 1.1 - Pathname Unpacked Packed SqueezedCrunchedSquashedUnknown UnStoringUnPackingUnCrunchingUnSqueezingUnSquashing Highlight TaggedHP|KM;?Q+ +THVP D   > n   Extract Single File or Tagged Files.Display Highlighted File on The Screen.Print Current File (With Pitch and Format Options).Show/Select ARC Files in the Current Directory.Show/Select Available Drive(s).Show/Change Sub-Directories.Exit Outta Here.============ ======= ==== ======== === ======= ===== ========= ====== =====$Name Length Disk Stowage Ver Stored Saved Date Time CRC (c)1987 Copyrighted (c) 1987 Totals $ ==== ======= ==== ======= ===$ F4 - Print Sub Files F5 - Shell to DOS *.* $   `؛XdSqL6ͻ ͼZ͸ ;Drive Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A Drive A  Documentation for NARCCFG.EXE Written by Gary Conway Infinity Design Concepts Copyright 1987 IMPORTANT. NARCCFG.EXE is NOT compatible with previous version(s) of NARC, that is version(s) prior to 1.1 The NARCCFG.EXE program allows the user to configure the screen colors and printer strings used by NARC.EXE when printing files. The main menu gives 3 options. 0 - Exit NARCCFG.EXE (with save option) 1 - Customize Screen Colors for NARC.EXE 2 - Customize Printer Strings for NARC.EXE 3 - Restore All NARC defaults to those as released in NARC.EXE NOTE: NARCCFG reads NARC.EXE and will show you the current configurations of the colors and printer strings. NARC.EXE -MUST- be in the same directory with NARCCFG.EXE and must be named NARC.EXE. Exiting.... When you choose the Exit option, you will have the opportunity to abort any changes that you may have made while running NARCCFG.EXE, or you may save them. Saving the changes causes NARC.EXE to be modified with whatever changes you have made and will reflect these modifications the next time NARC is run. Customizing Colors.... You will be shown a dummy NARC screen. The function keys are labeled on screen as to which colors they will change. The changes take place immediately on screen, so it is easy to see just what effect your changes will have. The ALT key in conjunction with any of the function keys will toggle high and low intensity. Hit the ENTER key when you are finished. Printer Strings.... There are three printer strings used in NARC.EXE. At print time, you have the option of sending any one of the three strings. You may enter up to 8 characters for each printer string. You can enter things like CTRL-P or the ESCape key. NARCCFG makes a distinction between upper and lower case on the printer strings, so make sure you use the shift key if necessary. The NULL character is enterd by the space bar, so if you only need to enter 2 characters for a string, NULL the remaining characters out. This will cause NARC to send your 2 charcters and then 6 NULLs. NOTE: The strings are labelled as 10,12 and 17 cpi, but this is only for purposes of identification. You may use them for anything that you deem necessary in any order as long as you remember what you did. PATCH LOCATIONS The printer string and color tables have fixed addresses in NARC.EXE and will not be changed arbitrarily in future releases. The printer string table starts at offset 200h in the EXE file, this is just after the loader header. The tables are set up as follows. Offset (in HEX) Printer String Table 200 10 cpi string, 8 characters plus a "$" terminator 209 12 cpi string, 8 characters plus a "$" terminator 212 17 cpi string, 8 characters plus a "$" terminator Color Table 21B window shadow color (10h is default) 21C subfiles "normal" (1Eh is default) 21D pathname (1Fh is default) 21E normal color (0Fh is default) 21F menu highlighting (4Eh is default) 220 view file color (0Eh is default) 221 background (10h is default) 222 tag color (4Fh is default) 223 column headers (70h is default) Monochrome Table 224 window shadow color (07h is default) 225 subfiles "normal" (07h is default) 226 pathname (07h is default) 227 normal color (07h is default) 228 menu highlighting (70h is default) 229 view file color (07h is default) 22A background (07h is default) 22B tag color (70h is default) 22C column headers (70h is default) Each of the color bytes can be broken up as follows. Bits 0-2 = foreground color (8 colors) Bit 3 = intensity (1 = high, 0 = low) Bits 4-6 = background color (8 colors) Bit 7 = blinking (not used in NARC) EOF Narccfg.DOC MZ  s8  STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK STACK ؎(!A 6 G2!> 6  N3!s0 6= -X6 ps  6Q 3 [ Y,3 t<0t<1t <2t<3t0}뎍6 >V -6c 3f 6 3,V -> !6^ 6v  > r > t > t 6h 6V 6_ QV^Y; 6 3 t > t >h >V >_ QWk_Y6 ;3 t6q >z %d6V >-  @?! >!ì<tKWVQRPQ 3 3ҹ 2—YX& <t <t ZY^_QVW!_^Y@&` P? B DXP, 3XP3ɺOXÉ6 ^SQRW6 VWã X^_ZY[P @&$0<0t >q 6z %d 2PO}\t\G< t <t&-<.t <.uF.G< t <t ð gy ky ?}r lr @}s ms A}v nv Bw ow C}q pq D}x qx  & >  Printer Pitch Codes  Space Bar = NUL ESCNULChange (y/n) [ ]Correct (y/n) [ ]Enter NEW 10 cpi Code -> Enter NEW 12 cpi Code -> Enter NEW 17 cpi Code -> Current 10 cpi Code -> Current 12 cpi Code -> Current 17 cpi Code -> P$M$$NOppppP$M$$NOpppp,Î؎У@،+*&*%,3+t0! u &,D t6>B33۹u%Cu>F<> |u >H& 2F&<=t< t< uI3frst@H+V6D>BD3^3Q;6>uN6< t6< t6D6<"u;6>t 6|\t "6;6>t>N6<"u&;6>t 6|\uVN;6>t 6d6$>^ u6< t6< uFVA6<"u6 > ~ BF@@PSA:&63P<t+>B3<6<J~&8>UdUuT&@L!3It'F&<0|<9,0rrr r2sô !L!U68666: 3P]U$P P 僆<u#K&05 0-^t 0;t5F0 $xY.;u.gGe=x=t7r*c&p"vl]#FF!#F5 guTF5v<tGFPSP勶^SF^؃@|ȸPW&0<u"ر艆t$;w PP\ 偮ϋ+- RF 4FJP&P$FJP,HFFFx1ZJ/tBJ<:uF@P^ S^JSvB NFFFFxBJ<.uFvBJ}34#$P uP$僆뽸PFJPPMu+F PP.卆PPPPFJP6P卆P0u+F PP卆PPP:ǃ>uBP262ĺ]U싆3ɺ_ |3ɺE }QPS6yP^S6僮VSNQQP|"FtcD 3QPS6l$PFP6GF+u(ZPFF= sFB0Pw 33ۣ3QPS6 ]U >u>t >u^iPv ~33ۉ <r 3Pv t @uPv uPvv md4P Kt]>uUFHFFx$P!t (FNՃ~u_ 6 ]U0=t4=t=u5PPW ;PPB & 0]Ã>uRPP PP 堸0= wN=tI>t( P PP +S50HHPPP20]Ã>u>t>tPPFPs uu5PzPqEPhP3P P F/0=yt=nuF/0P_~/nu"iPPUe0]øyPP >u-3PP @uP}P2$0]tO>u' PPA PP4 PP' >u666- 6 0]UF N t'SF@uPPPFvFσ]U >0t.a 0}|. Q Y m g a Z\PFP;~r*PP.q23]ËF@@3)^SP d;t0.  S.;t5PPP2>t P]UF@uPP23]Ã~uv0@uPP23]Ã0= v=ut>uP5 P7P# P%PPP!6/ P66P6666663]à<u,PPPP]U 6{P<vvcv3]U 6NvP>v]Uv<t0FP]Uv]Uvv]U3ۅyK;u;r ) 3P666d]UF%0P]U>uPSGPJPP +SSP堸0|^}Y.P@P5P*PPP P~SP6666k% P-QRSP :RQSPP P~PqPd6[]UF ^ 3ɺdENVm3ɺd+ȃ VrF 1Pv%P]UvP]UPOv$v vv v]UF 1Phv`]UFNt]UF ^PSF ^@ByPSF ^cPSoF ^3ɺ'NPSZF ^3ɺ9PSEF ^3ɺd$PS0F ^3ɺ PSv vP/]UF ^ 3ɺ ҉Vu >tvT]U Pz]UP]UFd1PFd1R]UF 10R&]U:Pv u'/Pvuv=FtGFt@vRPRP!HR0=:Ft=/t PRP]3]ø3҉F^3 t ]ùF^S^t ]ËF^&$3 ]UfFV!]UV!]U^NVW!]P3XPx+u3;twH XUN t&F t/NF3vvHUN u 33ۃ]ÉF u33NFy3v3yڃux ;r+COu3ɋ!;r u;r+COu΋3FtFtڃ]VW u t u u33_^Ë؋ړUNV!]U^NV?!]UYF B^NV!]r؋UVC!]rUv~;NrNO]U!]U~v3O F]U~v uF]U^3O+]UF>tPL!UY+(V+r&SJ![r( "3]ãY]sLtS&Y> |3۴Y!>.Y |L!U3R Ћ>6T}Mx6=uN=uD2؊R*Mxᬊx㋟yRӄtW=uC>6.]݈.R32㋏xuԊيR*v԰*RMx꠹tr)뱊3Ix#t&E;>r>n >낰뽋6T)66..Tþ3ɋ3ۋx @<r\D@DӉu2 ر%ؾ8tK؋@te%؀8tGt33؋lj@áX=u,r<2Ћr/2؋±ÁXËr2ºXU033F3HDDFD@F=rиXZ]3\^QV؊xU.\tP`P$rKȾ؀8uVؠxEsăxt@Es@]Ê@xEs>^t/2PVءVQ9Y^^3G@XGVGVtH\2]Sr6Hr+p rr|Ì؀ã[؉&Ћ&Sã[؀&SSz t㋟z..[.. [> t z|3~$U&؀м F_>> tV;26t9;=r't;sݓ㋟$t㋟$䓢ۋup|:>C뽰KȊIxt&E;rȠzz}Ȼ:tK|SV3&2r C:zu2^zuz>؎Ћ&]W$3_ z|z+ѡr+|یŽË߿‹zK+Æģ~ȋ,;.|w~:s؊Ȁ2s~rw  ~ ~ ~ ~sI؀澃_=r{t;sb銇㋟$t㋟$ⓢ+F+;vc& s݈㉇$Et둪;>s sً݈㉇$E3+ȑ&>+>~@AAŁ@ Aρ@ ʁ@  AAہ@ށ@Aԁ@AAс@01A3@26@754A<@=?>A:;A9@8(@)+*A./A-@,$%A'@&"@#! A`aAc@bf@gedAl@monAjkAi@hx@y{zA~A}@|tuAw@vr@sqpAP@QSRAVWAU@T\]A_@^Z@[YXAHIAK@JN@OMLAD@EGFABCAA@@s3,.rx 662Ã=u3ҋ¬tSQRVWd?!ru=tPX_^ZY[.tMu ;w76Qt)Ct+C3«Yt t C2ª.ûл7U R +>&2Š؊232܊23&2Š؊232܊23&2Š؊23]Êt >;>s8pð3Ixt>&E>;>sPSQRVW%- O& @!;t>uPP_^ZY[XË>!A! Extracts files from an archive to their original name, size, time, & date. Usage: PKXARC [options] archive [d:path\] [file...] Options are: -r = replace existing files -v = verbose listing of archive(s) -c = extract file(s) to screen -p = extract file(s) to printer -t = test archive integrity -l = display software license -e,-x = extract file(s) -g = extract garbled file w/password archive Archive file name, wildcards *,? ok. Default extension is .ARC d:path\ Output drive and/or path. file Name(s) of files to extract. Wildcards *,? ok. Default is ALL files. If you find PKXARC fast, easy, and convenient to use, a contribution of $20 would be appreciated. With each contribution of $45 or more you will be registered to receive a diskette with the next version of PKARC, PKXARC & PKSFX when available. Please state the current version of the software which you have. Send contributions to: PKWARE, Inc. 7032 Ardara Avenue Glendale, WI 53209 p$&3PQ(.tRV!^Z u "3ɾӾ(Ӿp$Ӿ&.;#u You are free to use, copy and distribute PKXARC for noncommercial use IF: NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION. IT IS NOT MODIFIED IN ANY WAY. This program is provided AS IS without any warranty, expressed or implied, including but not limited to fitness for a particular purpose. If you have any questions or comments about PKXARC, send them to Phil Katz at: RBBS of Fargo or Exec-PC IBM BBS Fargo, ND. 701-293-5973 Shorewood, WI. 414-964-5160 UN vV^3t':t 3V^CJG3;~u]ô7!2Ë6tV<\u/uXË܋wW:tu3NUv~v.?*t:ttS:tO:t6:t2:t 3]:t:u7t:t :t:uFt:tGFG8lt>:u|ut :u t:uGt :u t:uF:t:t:u]Ät:Dt8ttutGFҋ܋wV Testing: Unknown compression method for: Warning! file already exists! overwrite (y/n)? not extracted.NULPKXARC: can't create: is not an archive. has an invalid decode tree. fails CRC check.Ok----------- PKXARC: 0123456789ABCDEF Filename Length Method Size Ratio Date Time CRC-------- ------ ------ ------ ----- ---- ---- --- Stored Packed SqueezedcrunchedCrunchedSquashedUnknown /   *** STACK OVERFLOW *** $Internal table overflow+;KDisk fullPKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 1 Table of Contents ----------------- Topic Page ----- ---- Features and Overview .............................. 2 Using PKXARC ....................................... 3 Examples ........................................... 4 Using PKXARC in a batch file ....................... 5 Multitasking and Network support ................... 5 PKXARC messages .................................... 6 PKXARC Revision history ............................ 7 General Information ................................ 11 Software License ................................... 12 PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 2 Features -------- o THE FASTEST ARCHIVE EXTRACTION - EVER. o Data integrity ensured by 16 bit Cyclic Redundancy Check. o Supports the PKARC file squashing and archive comment features. o Decrypts files encrypted with the PKARC encryption option. o Superior file buffering. o Multitasking and Network support. o Not Copy Protected Overview -------- An archive is a collection of one or more files placed into a single archive file. A file extension of .ARC is usually used to denote an archive. Each file in an archive is compressed to save disk space, backup storage space, and file transfer time. When a file is archived, it is analyzed and compressed with the most optimal data compression method for that file. Every file in an archive is stored with a 16-bit Cyclic Redundancy Check (CRC) to ensure data integrity when the file is extracted from the archive. PKXARC is a FAST! archive extraction utility that extracts files from an archive and restores them to their original name, size, time and date. It is completely compatible with SEA's (Software Enhancement Associate's) ARC program and PKWARE's FAST! archive create/update utility PKARC, but is many times faster than SEA's ARC program and faster than ANY OTHER archive extract utility. PKXARC achieves its speed through the use of C language with highly optimized assembly language routines, and advanced file buffering techniques. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 3 Usage: PKXARC [options] archive [d:\path] [file...] Options are: -r = replace existing file(s) -v = verbose listing of archive(s) -c = extract file(s) to the screen -p = extract file(s) to the printer -t = test archive integrity -l = display software license -e,-x = extract file(s) -g = extract garbled file with password archive Archive file name, wildcards *,? ok. Default extension is .ARC d:path\ Output drive and/or path. Note that only one output path can be specified, and it must be seperated from the list of files to extract by one or more spaces. The output path can be anywhere on the command line after the options though. file Name(s) of files to extract, list, or test. Wildcards *,? okay. Default is ALL files. -r Normally, PKXARC will prompt you with "Overwrite?" if extracting a file from an archive will overwrite an existing file. The Replace option will overwrite existing files without query. -c This option will extract files to the screen. -p This option will extract files to the printer. PKXARC will print a form feed after each file. -t This option will test archive integrity. Particularily, PKXARC will calculate each files CRC value and compare it with the stored value within the archive. A message will be displayed to indicate the integrity of each file. -v This option is used to list the contents of an archive. It will list the filename, length of file before compression, method of compression, size after compression, compression ratio, and the stored CRC value. -l This option will display PKWARE's software license and address. -e These options will extract files from an archive. This is the -x default for PKXARC if no other options are specified. The -e and -x options do not have to be specified for this. They are only present for compatibility with SEA's ARC program syntax. The -e and -x options can not be used with other options. -g Extract encrypted (garbled) files with the given password. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 4 Examples: PKXARC a:* b: - Extract all files from all archives on drive A: storing extracted files on drive B:. PKXARC sigdir1 c: - Extract all files from the archive SIGDIR1.ARC in the current drive & subdirectory storing extracted files in the current directory on drive C:. PKXARC c:\lotus\tax *.wks - Extract all .WKS files from archive C:\LOTUS\TAX.ARC storing extracted files in the current drive & subdirectory. PKXARC -r c:\public\* d:\ *.doc *.txt - Extract all .DOC and .TXT files from all archives in the directory C:\PUBLIC, storing the extracted files in the root directory of drive D:. Overwrites existing files in D:\ without query. PKXARC -v c:\download\* - Display a verbose listing of all archives in the directory C:\DOWNLOAD. PKXARC -c utility *.doc - Extract all .DOC files form the archive UTILITY.ARC displaying extracted files on the console. PKXARC -p utility *.doc - Same as above, except extracted files are sent to the printer. PKXARC -t utility -Test the integrity of the archive UTILITY.ARC. PKXARC -t c:\download\* -Test the validity of all archives in the directory C:\DOWNLOAD. PKXARC -gsecret private - Extract all the files from the archive PRIVATE.ARC using SECRET as the decryption password. Note that the password is NOT case sensitive. The "-g" option must be the last option specified, and must be immediately followed by the password without intervening spaces. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 5 Using PKXARC in a batch file --------------------------- If you are using PKXARC from a batch file, you can test if PKXARC experienced an error using the DOS errorlevel variable. PKXARC returns zero errorlevel if no errors have occurred. If an error occurred, PKXARC will return the following error codes: abort exit codes: 2 - out of memory 3 - no archives found to extract 4 - can't open archive file 5 - read error on archive 6 - internal table overflow 7 - disk full non-abort (warning) exit codes: 1 - bad CRC, file is not an archive, unknown compression method, can't create a file, squeeze table is invalid or no files found to extract. Mulitasking and Network Support ------------------------------- PKXARC automatically opens all archives with SHARE "deny write access" under DOS 3.0 or above, so that they can be read concurrently by other tasks. This is especially useful when using PKXARC on Local Area Networks (LANs) or with multi-tasking software. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 6 PKXARC messages --------------- Warning! File XXXXXXXX.YYY already exists! overwrite (y/n)? - A file to be extracted from the archive already exists on disk. Answer "y" to extract the file from the archive anyway and overwrite the existing file, "n" to not extract the file from the archive. Use the "-r" command line option to suppress this warning. Unknown packing method for: XXXXXXXX.YYY - The file is compressed or encoded in a unknown way. The archive is either corrupt or requires a later version of PKXARC for proper extraction. Warning! File XXXXXXXX.YYY fails CRC check - The Cyclic Redundancy Check calculation did not match the stored value. The file is probably corrupt. XXXXXXXX.YYY is not an archive - The file specified is either not an archive, or is corrupt. Archive length error - A end of file token was not found for a file within the archive. The archive is corrupt. PKXARC: can't find XXXXXXXX.YYY - The given archive filename could not be found. PKXARC: Can't read archive: XXXXXXXX.YYY - The archive could not be opened. PKXARC: Can't create: XXXXXXXX.YYY - The output file could not be created. The output directory is invalid or full. PKXARC: File has invalid decode tree - The Huffman decode tree for the file is invalid. The archive is corrupt. PKXARC: Disk full - The destination disk is full. PKXARC: Internal table overflow - An internal decode table overflowed. The archive is corrupt. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 7 PKXARC history -------------- Soon after the archive file format was introduced into the public domain, it became popular and many BBS files were transfered this way. The archive format is a convenient way to put several files into one and compress them for effecient disk storage and reduced transfer time, in one step. However, the archive utility was much slower at extracting files than equivalent UnSQueeze type programs. In the inevitable quest for faster archive file extraction, PKXARC was created. Changes in PKXARC version 3.5 ----------------------------- Extraction of Crunched files are up to 25% faster and unSquashing is up to 50% faster than ever before. New -e and -x options have been added for ARC compatibility. The DOS switch character is now supported as a valid option seperator. The '-' character can be used in addition to the DOS switch character for options. The -g "arc garble" decryption option is supported. Both '/' and '\' characters are allowed in pathnames. Multitasking and Network support has been added to PKXARC. Wildcard file matching using '?' in the extension now works exactly like DOS directory wildcard matching. To help facilitate the automated use of PKXARC, PKXARC will no longer abort to DOS when a bad archive is encountered, but will continue on to the next archive. PKXARC's return codes have been extended to include errors that do not cause PKXARC to abort immediately (warnings). Damaged archive handling has been vastly improved. PKXARC will no longer hang up on badly damaged, truncated, or encrypted archives. In addition, PKXARC will automatically skip bad archive headers and will attempt to extract as many files from a damaged archive as possible. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 8 Changes in PKXARC version 3.4 ----------------------------- Support of "squashed" files created by PKARC 2.0 has been added. Squashing is a variation of Dynamic Ziv-Lempel-Welch encoding which can yield a 10% or better compression ratio for large text files. Squashed files typically unsquash 15% faster than equivalent crunched files. In order to be consistent with the command syntax of PKARC, the requirement for dashes ("-") to be given before individual filenames to extract or list has been removed. Error recovery for damaged archives has been improved. Previous versions of PKXARC would occasionally hang up while processing damaged archives. PKXARC version 3.4 has improved error recovery allowing at least the partial extraction of files from a damaged archive. Changes in PKXARC version 3.3 ----------------------------- Support of the PKARC archive comment feature was added. PKXARC will automatically display an archive comment if it is present in an archive. When extracting files to the printer, PKXARC will now print a form-feed character after each file. Extraction speed has been increased by 5% for Crunched files. Changes in PKXARC version 3.2 ----------------------------- The archive test function "/t" was added to PKXARC. This function tests the integrity of the archive without extracting the files to disk. Specifically, the CRC for each file is computed and compared against the correct value stored in the archive. Extraction speed has been increased by 5% for most files. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 9 Changes in PKXARC version 3.1 ----------------------------- A minor bug in the pattern matching code for individual file specifications when using the wildcard "*" was fixed. For example, previous versions of PKXARC would not correctly match "flight*.com" to the exact filename "flight.com". This has been corrected in PKXARC version 3.1. The verbose archive listing now displays the total number of files in the archive. Extraction speed has been increased 5-10% for all decompression methods. A "jr" version of PKXARC was created for computers with limited memory. PKXARCjr requires only 74K of free memory to run, but is slightly slower than the standard version for most archives. Both versions will run on any type of computer providing there is sufficient free memory. Changes in PKXARC version 3.0 ----------------------------- The following functions have been added to PKXARC version 3.0: Extraction of files to the console or printer. The ability to display a verbose archive listing. Changes in PKXARC version 2.7 ----------------------------- Extraction performance of Squeezed files has been improved more than 60%. PKXARC version 2.7 can extract a Squeezed file more than 8 times faster than ARC 5.1. The message displayed when a file is being extracted has been enhanced to indicate the compression method used to store the file. Message Meaning ------- ------- Extracting The file was Stored. un-Packing The file was Packed with non-repeat packing. uncrunching The file was crunched with old style Ziv-Lempel-Welch compression. unSqueezing The file was Squeezed with Huffman encoding. unCrunching The file was Crunched with Dynamic Ziv-Lempel-Welch compression. unSquashing The file was Squashed with Dynamic Ziv-Lempel-Welch compression. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 10 Changes in PKXARC version 2.6 ----------------------------- Extraction performance for all compression types has been significantly improved over PKXARC version 2.5. Files that are crunched with older versions of ARC (pre 5.x) extract 5% faster. Squeezed files extract 15% faster. Files that are Crunched with ARC 5.x extract 20% faster. Changes in PKXARC version 2.5 ----------------------------- The ability to extract specific files was added. PKXARC can now be passed the specific names of files to be extracted from an archive on the command line. Changes in PKXARC version 2.4 ----------------------------- Performance for extracting dynamic Ziv-Lempel files has been improved. Files which are identified as "Crunched" (with a capital C) on the ARC verbose listing extract 15-20% faster than before. When a "Disk full" error occurred, previous versions of PKXARC would leave an empty or incomplete file on the disk. PKXARC now deletes any incomplete files before aborting with a "Disk full" error. Changes in PKXARC version 2.3 ----------------------------- The ability to extract dynamic Ziv-Lempel-Welch encoded files was added. Version 5.0 of ARC introduced a new, more efficient variation of Ziv-Lempel "Crunching". PKXARC can now extract files Crunched with this method, approximately 3 times faster than ARC 5.1. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 11 General Information ------------------- PKXARC will run on any IBM PC/XT/AT/RT/jr/Portable/Convertible or any MS-DOS compatible computer running PC/MS-DOS 2.0 or higher with a minimum of 128K free RAM. IBM is a registered trademark of the International Business Machine Corporation. MS-DOS is a registered trademark of Microsoft Inc. If you have any questions or comments about PKARC send them to Phil Katz at: RBBS-PC of FARGO, Loren Jones SYSOP Fargo, North Dakota 701-293-5973 300/1200/2400 baud, 24 hours a day or Exec-PC IBM BBS, Bob Mahoney SYSOP Shorewood, Wisconsin 414-964-5160 300/1200/2400 baud, 24 hours a day Special thanks to Loren Jones, Bob Mahoney, Alan Losoff, Gene Alm, Mike Shawaluk, Paul Waldinger, Arny Krueger, Mark Tellier, Joe Vincent, David Wyatt and all those who have helped with the PKXARC effort. PKXARC FAST! Archive Extract Utility Version 3.5 04-27-87 Page 12 License ------- Copyright (c) 1986,1987 PKWARE, Inc. All Rights Reserved. You are free to use, copy and distribute PKXARC for noncommercial use IF: NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION. IT IS NOT MODIFIED IN ANY WAY. Clubs and user groups may charge a nominal fee (less than $10) for expenses and handling while distributing PKARC. Site licenses, commercial licenses and custom versions of PKARC and PKXARC are available. Write to the address below for more information. This program is provided AS IS without any warranty, expressed or implied, including but not limited to fitness for a particular purpose. If you find PKXARC fast, easy, and convenient to use, a contribution of $20 would be appreciated. With each contribution of $45 or more you will be registered to receive a diskette with the next version of PKARC and PKXARC when available. Please state the current versions of PKARC and PKXARC that you have. Send contributions to: PKWARE, Inc. 7032 Ardara Avenue Glendale, WI 53209 +P&$ l b &>!O! u$6 / 뿋&P PO>I!ˋ& !  QCommandScanningReading Scan Find Command Key:PgUp PgDn Home End X=exit ?=Help*** Text not found *** *** Top of file *** *** End-of-file *** Not enough memory $ Wrong DOS version $ Enter filename: $ Open failed, return code=$File not found $Path not found $Too many files $Access denied $LIST@ QDU?H/RLTPANXBW78+-KF\SMKIQGH=P;DOwsv0!##44=]/[vGOVeBB=./4[vmvu>t t&.6uƀ>tt @u$9<uĿ!T;seL߾zu>rhu>uH. 3 녀6z&/(6d6@\VD|$&p$p&&>>;r0R3>upÃ>t >;>s>w.<*0QWR> u>vP.L>>;OO>ώ A+AtP+txZ_Yt+ɊʋV+Ҵ?! t0&u +&%G&+$À>r+ۊۉr**>s66+>t(u" Ȭ+ġu>>QVWtu>+6&<u >< uσ+ƅ G͈G< u< t < u stQw>>ur_^YPSQRWV+ƋOH ~UP;v&< s<u :>uGG'us u utë^_ZY[XÀ> uWVR WVB  !t .þWVP> +^_ú >>>u&&&@&J&c&00u  ô0!<rúJ <$t < u۴û-J!H!r +;r&ú33ɠ tQ< t< t>Qtú ! O!+ PtꈿQúx!Q+ɴN!r1 u-L<\t