IMD 1.16: 8/06/2007 11:52:13 ebmmug.002 eastbay micromate users' group disk utilities & 'restore' disk issued april 5, 1984 123A2S+ NDX2 123T2Z+ NDX7T/MUG LSTCRCK DOC-EBMMUG 002#CRCKLISTCRC PEEKBDOSASMaDU COM6 !"-EBMMUG BAKDUCPM3 DOCS$%&'()CRCK4 ASMV*+,-./DUERASE DOC01ALIENS COMp2345678LU300 DOC9:;<=>?@ABCDEFGHLU300 DOCIJLU300 LBRKLMNOPQRSTUVWXYZLU300 LBR[\]^_`abcdefghijLU300 LBR1klmnopqrstuvPEEK SUBwPEEKBDOSPRNxyz{|}~PEEK ASMPEEK COM PMCRX ASM4TSETOFF ASMTSETON ASMCPM3UPD SUBUSQ COMPMCRX COMLTYPE COMASQ COM.PMCTX ASM_PMCTX COMSWEEP COM^RESTORE COMCRCK4 COM CRCK44 COMD OBJEBMDIR02TXTRESTORE ASM8RX/TX DOC FILE CRCEBMDIR02TXTEBMDIR02TXTD DOCSOFTSALEBAKD COM..123A2S+.NDX .8 .indent8 .top T/MUG INDEX - (A-S) PAGE -#- SUBJECT VOL. NO. PAGE .end T/MUG INDEX (A-S) SUBJECT VOL. NO. PAGE A Simple Invoicing System with T/Maker 1 6 14 ABSOLUTE Use in Percent Change Calculations 1 4 13 Address List for Personalized Envelopes & Letters 1 5 6 Addressing an Envelope with the Letter Data 1 3 6 Advanced Logic Systems OEM Agreement with T/Maker 3 1 1 Advertisement - Software Programs C/Plot & Curve 2 5 6 ALIGN After SAVE 3 1 15 ALIGN & the High-bit Key, usage 2 3 4 ALIGN, use to Create Columns of Text 2 4 3 ALIGN, Keep two words from being separated 2 3 4 ALIGN, Tricking Into Leaving Those Periods Alone 2 3 4 ALL, New Option to the TALLY Function 1 3 1 Alternative Methods of Financing using T/Maker's NPV 1 2 5 Analyzing Business Performance 1 2 10 Analyzing Survey Data with T/Maker Part I 1 6 4 Analyzing Survey Data with T/Maker Part II 2 3 7 Analyzing Survey Data with T/Maker Part III 2 4 12 Analyzing Survey Data with T/Maker Part IV 2 5 13 Answer to Walter E. Lewis 1 3 7 Apple CP/M card with T/Maker 3 1 1 Applications Programmers, T/Maker (List) 2 5 2 Appointment Calendar, Using T/Maker for an 1 6 12 Appraisal of Securities Portfolio, How to Calculate 1 3 2 Appraisal of Stock Portfolio, How to Calculate 1 3 2 Assets, Calculating for a Financial Statement 1 2 10 Available Formats for T/Maker III as of 01/15/83 3 1 14 Average Percentage Scores of Students, Calculating 1 6 10 Bank Account System, Developing A (First Version) 1 4 1 Bank Account System, Developing A (Second Version) 3 1 22 Bar Function, The (creating bar charts) 1 1 5 Basic Equations in T/Maker ("What Does This Mean?") 1 2 3 BDOS Bad Sector Errors, Avoid getting with RESET 1 4 12 Blank Lines Generate Zero Values 1 2 2 (.block and .end, Use Instead of .new; T/IPS 3 1 16 Calculate an IRR (Internal Rate of Return) w/T/Maker 2 3 5 Calculating Date Conversions, Growth Rate of Investment 1 6 9 Calculating Growth Rate of an Investment, Date Conv. 1 6 9 Calculating Loan Payments 3 1 17 Calculating Multiple Linear Regressions & LOAD/UNLOAD 2 3 6 Calculating Single Values from Ranges of Values 2 5 8 Calculating a Payroll with T/Maker 2 4 4 Calculations of Percentages 1 3 10 Calculations using ABSOLUTE for Percent Change 1 4 13 Calculations, Multiple - How to do 1 3 7 Calendar, Appointment, Using T/Maker 1 6 12 Change/Enhancement (Version 2.5) 1 1 1 Checking Account System, Developing A (First Version) 1 4 1 Checking Account System, Developing A (Second Version) 3 1 22 (.clean in File, not at What Next? Prompt, T/IPS 3 1 16 Cleaning Data, & Running Marginals (Survey Data II) 2 3 7 Cleaning Intermediate Calculations w/DROP TEMPORARY 1 4 13 CLIP AFTER, use to Create Columns of Text 2 4 3 CLIP After SAVE 3 1 15 CLIP BEFORE, use to Create Columns of Text 2 4 3 CLIP, use to Create Columns of Text 2  4 3 Collapses, Typologies & Recodes (Survey Data II) 2 3 7 Columns of Text, Creating 2 4 3 Columns, Using T/Maker to Create (Text files) 2 4 3 Comma, Use to Suppress Values For a Row in Printing 1 2 2 Comparison of Two Sample Means 1 1 26 Compatible Terminal List for T/Maker III 2 5 17 Compatible Terminal List for T/Maker III (Update) 2 6 2 Complement other Software with T/Maker 2 4 7 COMPUTE After SAVE 3 1 15 Consolidated Statment of Earnings for a Fin. Statment 1 2 10 Consultants on T/Maker Fields/Applications Needed 3 1 5 Contests for the User, T/Maker 2 3 2 Contracts, New for T/Maker 2 5 2 Conversions, Date; Growth Rate of an Investment 1 6 9 Converting Minuses to Parentheses, MACRO method  2 3 12 Converting Minuses to Parentheses, REPLACE method 2 3 13 Converting Ranges of Values to Single Values 2 5 8 Copy Vital Disks at Least Once a Month, T/IPS 3 1 16 Cost Projections for Software (projecting budget) 1 5 11 C/Plot & Curve, Numerical Data Analysis Software 2 5 6 Crashed Drive Caper, T/Maker and the (mailmerge) 2 4 9 Creating A Stock Portfolio 3 1 10 Creating Columns of Text 2 4 3 Curve, C/Plot & - Numerical Data Analysis Software 2 5 6 Customization for MSDOS Computer Keyboards 2 5 4 Customization for NorthStar Advantage Keyboards 2 5 3 Data Analysis, Numerical - Software Advertisement 2 5 6 Data, Analyzing Survey, with T/Maker (Part I) 1 6 4 Data, Analyzing Survey, with T/Maker (Part II) 2 3 7 Data, Analyzing Survey, with T/Maker (Part III) 2 4 12 Data, Analyzing Survey, with T/Maker (Part IV) 2 5 13 Data Base, T/Maker (Announcement) 3 1 13 DATA, Designating a Default Data Drive 1 3 1 Data, missing, from a table (Dealing with it) 1 6 10 Data Set, Setting up the (Analyzing Survey Data I) 1 6 4 Data to Different Files with T/Maker 2 6 8 Date Conversions, Growth Rate of an Investment 1 6 9 dBASE II and T/Maker use Tip 2 4 10 dBASE II and Use of a Command (.CMD) file 2 4 10 Default Drive Designation with DATA 1 3 1 Default Value, Drive Setting with T/MODIFY 1 3 1 Dependent Variable (Survey Data III) 2 4 13 Dichotomizing the Variable (Survey Data III) 2 4 13 Different Files, Data to with T/Maker 2 6 8 DIF files and T/Maker  2 4 7 Distributor List, T/Maker 2 3 14 Distributor List, T/Maker 2 5 21 Distributor List, T/Maker New additions 2 6 1 Distributor List, T/Maker Updated 2 6 19 DO After SAVE 3 1 15 Doctor in the Group?, Is There a 3 1 4 Documentation, New T/Maker, - New Packaging 3 1 2 Dollar Signs & Percent Signs, Getting to Stay Put 1 4 13 Double Print Feature with PRINT.UTL 1 4 12 Drive Caper, T/Maker and the Crashed (mailmerge) 2 4 9 Drive, Default Designation with DATA 1 3 1 Drive Default Value Setting with T/MODIFY 1 3 1 DROP After SAVE 3 1 15 DROP TEMPORARY For Cleaning Intermediate Calculations 1 4 13 8 Bit Version of T/Maker & TAB 2 4 8 (.end and .block, Use Instead of .new; T/IPS 3 1 16 Envelope, Typing the 1 3 6 Envelopes & Letters, Personalized, Mailing list for 1 5 6 Epsilon or Percentage Difference (Survey Data III) 2 4 15 Epson Printer, Double Print Feature with PRINT.UTL 1 4 12 Equations in T/Maker, Basic ("What Does This Mean?") 1 2 3 Equipment Replacement With Discounting 1 2 7 Evaluating Job Candidates (ranked/ordered) 1 5 1 Fancy Font Software for the T/MUG 2 3 4 Federal Income Tax Form, 1040 1 1 20 FETCH, use Tip 2 4 10 FETCH, STORE & in T/Maker Basic Equations 1 2 3 FETCH, Used to get a zero 1 2 2 Files, Data to Different with T/Maker 2 6 8 Financial Statements for a Business 1 2 10 FIND and KEYSTROKE MACRO usage 2 3 4 FIND, Using Keystroke Macro with 2 3 4 Form Letter Approach #2 3 1 6 Form Letter Generator, Simple 2 6 4 Form, 1040 Federal Tax 1 1 20 Formats for T/Maker III Available as of 11/15/83 3 1 14 Free Tea Mug (Terminal Configuration Data Survey) 2 5 17 Free Tea Mug continued 2 6 2 Garbage Characters, File for Getting Rid of, (T/IPS) 2 4 11 GET, use to Create Columns of Text 2 4 3 Getting Dollar Signs & Percent Signs to Stay Put 1 4 13 Graphics characters, creating 1 1 2 Growth Rate of an Investment, Date Converstions 1 6 9 High Bit Character, The 1 1 3 High Bit Key & ALIGN, spaces and periods 2 3 4 Hyperion Mico Computer RAM usage to Speed-up T/Maker 2 5 11 Information Routing to Different Files with T/Maker 2 6 8 Information Routing with T/Maker 2 6 8 Information, Product (T/Maker) 2 5 2 Insert and Merge, Using 2 4 10 INSERT, use Tip 2 4 10 Intermediate Calculations Cleaned w/DROP TEMPORARY 1 4 13 Internal Rate of Return Using T/Maker III 2 3 5 Investment Growth Rate, Date Conversions 1 6 9 Invoicing System, A Simple, with T/Maker 1 6 14 IRA, Opening An 1 3 9 IRR, (Internal Rate of Return) Calculated w/T/Maker 2 3 5 Is There a Doctor in the Group? 3 1 4 Japanese T/Maker III, Micro REPO for the NUK Micro  2 3 3 Job Candidates Evaluation (rank/ordered) 1 5 1 Join the "T/Make a Friend Club" 3 1 20 KEEP After SAVE 3 1 15 Keyboard Customization for MSDOS Computers 2 5 4 Keyboard Customization for NorthStar Advantage 2 5 3 KEYSTROKE MACRO & Address List 1 5 6 KEYSTROKE MACRO & Mailing List 1 5 6 KEYSTROKE MACRO and FIND, Usage 2 3 4 KEYSTROKE MACRO with FIND, Using 2 3 4 KEYSTROKE MACRO: Putting Lists Side-By-Side 1 3 5 Lease Financing, Using T/Maker's NPV 1 2 5 Lease Purchase Financing, Using T/Maker's NPV 1 2 5 Letter Address Moved to the Envelope 1 3 6 Letter, Form - Approach #2 3 1 6 Letter Generator, Simple Form  2 6 4 Letters & Envelopes, Personalized, Mailing List for 1 5 6 Letters, Printing many at once 2 5 11 Lewis, Walter E., Answer to 1 3 7 Liabilities, Calculating for a Financial Statement 1 2 10 Lightening T/Maker with a RAM Disk (Hyperion PC) 2 5 11 Listing of T/Maker Distributors 2 3 14 Listing of T/Maker Distributors 2 5 21 Listing of T/Maker New Distributors 2 6 1 Listing of T/Maker Distributors (Update) 2 6 19 Lists Side-By-Side, Putting (KEYSTROKE MACRO) 1 3 5 LOAD, use Tip 2 4 11 Loading From a Table 2 4 10 LOAD/UNLOAD & Multiple Linear Regression Calculations 2 3 6 LOAD/UNLOAD & Simultaneous Linear Equations 2 3 6 LOAD/UNLOAD, Use of  1 3 2 Loan Payments, Calculating 3 1 17 Lotus 1-2-3 with T/Maker 2 4 7 MACRO, KEYSTROKE and FIND, Usage 2 3 4 MACRO, KEYSTROKE, Use with a Mailing List 1 5 6 MACRO, KEYSTROKE, Use with an Address List 1 5 6 MACRO method of Converting Minuses to Parentheses 2 3 12 MERGE, use Tip 2 4 10 MERGE use to Create Columns of Text 2 4 3 Mailing List used to Personalize Letters & Envelopes 1 5 6 Mailmerge, T/Maker and the Crashed Drive Caper 2 4 9 Managing Ratios, for a Financial Statement 1 2 10 Measures of Association, Tables & (Survey Data III) 2 4 12 Measures of Association, Tables & (Survey Data IV) 2 5 13 Membership System - Accounting Summaries & Reports 1 4 11 Membership System - Analyzing Member Characteristics 1 4 9 Membership System - Producing Mailing Labels 1 4 8 Membership System - The Files 1 4 6 Membership System using T/Maker, A 1 4 6 Merge, Using Insert and 2 4 10 Micro REPO, Japanese T/Maker III for the NUK Micro 2 3 3 MicroMate, Personal Micro Computer's & T/Maker III 2 3 3 Minuses to Parentheses, Converting, MACRO method 2 3 12 Minuses to Parentheses, Converting, REPLACE method 2 3 13 Missing Data, in a table (Dealing with it) 1 6 10 Multiple Calculations - How to do 1 3 7 Multiple Files, Information Routing with T/Maker 2 6 8 Multiple Files, Routing Information to with T/Maker 2 6 8 Multiple Linear Regression Calculator & LOAD/UNLOAD 2 3 6 Negative & Positive Percent Change Calculations 1 4 13 Net Present Value (NPV), T/Maker's 1 2 5 New Contracts for T/Maker 2 5 2 New Distributors of T/Maker 2 6 1 New Packaging of New T/Maker Documentation 3 1 2 (.new, Use .end and .block Instead of; T/IPS 3 1 16 News on OEMs' 2 3 3 NONSTOP, PRINT use 2 5 11 NPV, T/Maker's Net Present Value 1 2 5 NUK Micro uses Japanese T/Maker III called Micro REPO 2 3 3 Numerical Data Analysis Software Advertisement 2 5 6 Numerical Data Analysis with T/Maker (Advertisement) 2 5 6 OEM Agreements with Advanced Logic Systems & Sperry 3 1 1 OEM News 2 3 3 One Drive Mailmerge with T/Maker, the Crashed Drive 2 4 9 Opening an IRA 1 3  9 Other Programs and T/Maker 2 4 7 Panasonic Users - Patching T/Maker 1 1 1 Patching T/Maker for the Panasonic machine 1 1 1 Payments, Calculating Loan 3 1 17 Payroll Program with T/Maker 2 4 4 Percent Calculations 1 3 10 Percent Change Calculations, Positive & Negative 1 4 13 Percent Signs & Dollar Signs, Getting to Stay Put 1 4 13 Percentage Difference, Epsilon or (Survey Data III) 2 4 15 Percentage Scores, Average of Students, Calculating 1 6 10 Percents, Percents, and More Percents 1 3 10 Performance Ratios for a Financial Statement 1 2 10 Personal Micro Computer's MicroMate & T/Maker III 2 3 3 Personal Micro Computer, Inc. Meetings w/ T/Maker 2 5 1 Personalized Letters & Envelopes, Mailing List for  1 5 6 PMC Meetings with T/Maker 2 5 1 Portfolio Appraisal, Security How to Generate 1 3 2 Portfolio Appraisal, Stock How to Generate 1 3 2 Positive & Negative Percent Change Calculations 1 4 13 PRINT NONSTOP, use 2 5 11 Printing Many Documents 2 5 11 Printing the Labels (from mailing list) 2 6 6 Printing, Suppressing Particular Values For a Row 1 2 2 Product Information on T/Maker 2 5 2 Profitability Ratios for a Financial Statement 1 2 10 Program for Payroll with T/Maker 2 4 4 Programmers, T/Maker Applications (List) 2 5 2 Programs, Other and T/Maker 2 4 7 Projecting Costs for Software (projecting budget) 1 5 11 Purchase, Using T/Maker's NPV  1 2 5 RAM usage to speed up T/Maker (Hyperion PC) 2 5 11 RARELY COMPUTE Option used to Force Zero Values 1 2 2 Recodes, Collapses & Typologies (Survey Data II) 2 3 7 RENAME use to Create Columns of Text 2 4 3 REPLACE method of Converting Minuses to Parentheses 2 3 13 RESET Save, Recommended use of SAVE is with RESET 1 4 12 RESET, Avoid getting BDOS Bad Sector Errors with 1 4 12 Reviews of T/Maker 2 3 2 Reviews of T/Maker 2 4 1 Reviews of T/Maker 2 4 2 Reviews of T/Maker 2 5 1 Reviews of T/Maker 2 6 1 Reviews of T/Maker 3 1 2 Rounting Information to Different Files with T/Maker 2 6 8 Routing Information with T/Maker 2 6 8 Running Marginals & Cleaning Data (Survey Data II) 2 3 7 Sample Means, Comparison of Two 1 1 26 SAVE Before ALIGN, CLIP, COMPUTE, DO or DROP 3 1 15 SAVE Before KEEP or SORT 3 1 15 SAVE the Working File Before Getting Up, T/IPS 3 1 15 SAVE use to Create Columns of Text 2 4 3 SAVE, Use with RESET (Recommended) 1 4 12 Scores, Student Average Percentage, Calculating 1 6 10 Security Portfolio Appraisal, How to Generate 1 3 2 SET-ALL-TABS Option to Enter Spreadsheet Data, Use 3 1 16 Setting up the Data Set (Analyzing Survey Data I) 1 6 4 Shareholders' Equity, Calculating for a Fin. Statment 1 2 10 Side-By-Side Lists, Putting (KEYSTROKE MACRO) 1 3 5 Simple Invoicing System, with T/Maker 1 6 14 Simultaneous Linear Equations & LOAD/UNLOAD 2 3 6 Single Values, Converting from Ranges of Values 2 5 8 16 Bit Version of T/Maker & TAB 2 4 8 Software Cost Projections (projecting budget) 1 5 11 Software, Other Programs with T/Maker 2 4 7 SORT After SAVE 3 1 15 Special Customization for NorthStar & MS DOS Computers 2 5 3 Special Customization of T/Maker for MSDOS Computers 2 5 4 Special Customization of T/Maker for NorthStar 2 5 3 Specifications for T/Maker Terminal (Data Request) 2 6 20 Speed-up T/Maker with Hyperion Micro Computer RAM use 2 5 11 Sperry Corporation OEM Agreement with T/Maker 3 1 1 Spreadsheet Does Not Work, Check for... 3 1 15 Standard Deviation computation 1 1 26 Statistical Functions performed with T/Maker 1 1 26 Stock Portfolio Appraisal, How to Generate 1 3 2 STORE & FETCH in Basic T/Maker Equations 1 2 3 STOREd, use Tip 2 4 10 Student Average Percentage Scores, Calculating 1 6 10 Sum of Squares computation 1 1 26 SuperCalc with T/Maker 2 4 7 Suppressing Particular Values For a Row in Printing 1 2 2 Survey Data, Analyzing with T/Maker (Part I) 1 6 4 Survey Data, Analyzing with T/Maker (Part II) 2 3 7 Survey Data, Analyzing with T/Maker (Part III) 2 4 12 Survey Data, Analyzing with T/Maker (Part IV) 2 5 13 System, A Simple Invoicing, with T/Maker 1 6 14 System, Developing a Checking Account (First Version) 1 4 1 System, Developing a Checking Account (Second Version) 3 1 22 System, Membership - Accounting Summaries & Reports 1 4 11  System, Membership - Analyzing Member Characteristics 1 4 9 System, Membership - Producing Mailing Labels 1 4 8 System, Membership - The Files 1 4 6  5.00 (156.65) 02-16-84 Sold to Stan Zisk MMUG-A 5.00 (151.65) 03-01-84 Sold to Ed Spitzer 010, 011, 012 & 013 @ $2 ea. 8.00 (143.65) 03-01-84 Sold to Jerry Howard MMUG-A 5.00 (138.65) 04-05-84 Sold to Ed Spitzer 014, 015, & 016 @ $2 ea. 6.00 (132.65) -------- Reinburse DD for 50 disks see above for details 67.01 (199.66)  IP AFTER, use to Create Columns of Text 2 4 3 CLIP After SAVE 3 1 15 CLIP BEFORE, use to Create Columns of Text 2 4 3 CLIP, use to Create Columns of Text 2 4 3 COMPUTE After SAVE 3 1 15 Calculate an IRR (Internal Rate of Return) w/T/Maker 2 3 5 Calculating Date Conversions, Growth Rate of Investment 1 6 9 Calculating Growth Rate of an Investment, Date Conv. 1 6 9 Calculating Loan Payments 3 1 17 Calculating Multiple Linear Regressions & LOAD/UNLOAD 2 3 6 Calculating Single Values from Ranges of Values 2 5 8 Calculating a Payroll with T/Maker 2 4 4 Calculations of Percentages 1 3 10 Calculations using ABSOLUTE for Percent Change 1 4 13 Calculations, Multiple - How to do 1 ..123T2Z+.NDX .indent8 .8 .top T/MUG (T to Z) INDEX PAGE -#- SUBJECT VOL. NO. PAGE .end T/MUG INDEX (T to Z) SUBJECT VOL. NO. PAGE TABs and T/Maker 8 Bit Version 2 4 8 TABs and T/Maker 16 Bit Version 2 4 8 TALLY Function, ALL a New Option to the 1 3 1 Table, Loading from a 2 4 10 Tables and Measures of Association (Survey Data III) 2 4 12 Tables and Measures of Association (Survey Data IV) 2 5 13 Tax Computation Table 1 3 7 Tax Form, 1040 Federal 1 1 20 Tea Mug, Free (Terminal Configuration Data Survey) 2 5 17 Tea Mug, How to Win a 2 5 2 Tea Mug, How to Win a - continued 2 6 2 1040 Federal Tax Form 1 1 20 Terminal Control Data Survey, T/Maker 2 5 17 Terminal List for T/Maker III, Compatable 2 5 17 Terminal List for T/Maker III, Compatable (Update) 2 6 2 Terminal Specifications for T/Maker (Data Request) 2 6 20 Text in Columns, Creating 2 4 3 T/IPS (Copy Vital Disks at Least Once a Month) 3 1 16 T/IPS (File for getting rid of garbage characters) 2 4 11 T/IPS (Lightening T/Maker with a RAM Disk) 2 5 11 T/IPS (List of rules) 3 1 15 T/IPS (Printing many Documents) 2 5 11 T/IPS (SAVE Before ALIGN, CLIP, COMPUTE, DO or DROP) 3 1 15 T/IPS (SAVE Before KEEP or SORT) 3 1 15 T/IPS (SAVE the Working File Before Getting Up) 3 1 15 T/IPS (Use of FETCH & STOREd) 2 4 10 T/IPS (Use of INSERT & MERGE) 2 4 10 T/IPS (Use of LOAD) 2 4 11 T/IPS (Use of PRINT NONSTOP) 2 5 11 T/IPS (Use .block and .end Instead of .new) 3 1 16 T/IPS (Use .clean in File, not at What Next? Prompt) 3 1 16 T/IPS (Use the "SET-ALL-TABS" Option to Enter SS Data) 3 1 16 T/IPS (When A Spreadsheet Doesn't Work, Check for...) 3 1 15 T/Make a Friend Club (Announcement) 3 1 20 T/Make a Friend Club, Join the 3 1 20 T/Maker and Other Programs 2 4 7 T/Maker and TABs 2 4 8 T/Maker and the Crashed Drive Caper, (mailmerge) 2 4 9 T/Maker Applications Programmers (List) 2 5 2 T/Maker Appointment Calendar 1 6 12 T/Maker Consultants, Request for Names, (Also a list) 3 1 5 T/Maker Contests for the User 2 3 2 T/Maker Data Base (Announcement) 3 1 13 T/Maker Distributor List 2 3 14 T/Maker Distributor List 2 5 21 T/Maker Distributor List, New additions 2 6 1 T/Maker Distributor List, Updated 2 6 19 T/Maker Documentation, New - New Packaging 3 1 2 T/Maker Invoicing System, Simple 1 6 14 T/Maker with Lotus 1-2-3 2 4 7 T/Maker New Contracts 2 5 2 T/Maker New Distributor List 2 6 1 T/Maker OEM Agreement with Advanced Logic System 3 1 1 T/Maker OEM Agreement with Sperry Corporation 3 1 1 T/Maker and Other Programs 2  4 7 T/Maker Payroll Program 2 4 4 T/Maker Reviews 3 1 2 T/Maker Reviews 2 3 2 T/Maker Reviews 2 4 1 T/Maker Reviews 2 4 2 T/Maker Reviews 2 5 1 T/Maker Reviews 2 6 1 T/Maker Simple Invoicing System 1 6 14 T/Maker with SuperCalc 2 4 7 T/Maker and TABs 2 4 8 T/Maker Terminal Compatibility List 2 5 17 T/Maker Terminal Compatibility List (Update) 2 6 2 T/Maker Terminal Control Data Survey 2 5 17 T/Maker Terminal Specifications (Data Request Form) 2 6 20 T/Maker and the Crashed Drive Caper, (mailmerge) 2 4 9 T/Maker with Lotus 1-2-3 2 4 7 T/Maker with SuperCalc 2 4 7 T/Maker with VisiCalc 2 4 7 T/Maker III & Personal Micro Computer's MicroMate 2 3 3 T/Maker III (Announcement) 1 6 2 T/Maker III Compatable Terminals List 2 5 17 T/Maker III Compatible Terminals List (Update) 2 6 2 T/Maker III Format Availability as of 01/15/83 3 1 14 T/MODIFY, Double Print Feature with PRINT.UTL 1 4 12 T/MODIFY, Use of to Set Drive Default Value 1 3 1 T/MUG uses Fancy Font Software 2 3 4 Translating Output to The Printer (PRINT.UTL) 1 1 2 Typing the Envelope 1 3 6 UNLOAD, LOAD/ Use of 1 3 2 Upcoming Shows - Softcon in New Orleans Feb. 21-23 3 1 4 Use of ABSOLUTE in Percent Change Calculations 1 4 13 Use of LOAD/UNLOAD 1 3 2 VisiCalc with T/Maker 2 4 7 WAIT (Used to move a file to another disk and return) 2 4 11 Walter E. Lewis, Answer to 1 3 7 West Virginia State to use T/Maker 3 1 1 When A Spreadsheet Does Not Work, Check for...,T/IPS 3 1 15 Win a Tea Mug (How to) 2 5 2 Win a Tea Mug (How to continued) 2 6 2 Zero Values Generated with RARELY COMPUTE Option 1 2 2 Zero Values Generated with a Line with Blanks 1 2 2 Zero Values with FETCH 1 2 2 * * * * * * * * * *  page number, it is automatically moved further along. Up to 124 characters may be used for t 2 3 3 Job Candidates Evaluation (rank/ordered) 1 5 1 Join the "T/Make a Friend Club" 3 1 20 KEEP After SAVE 3 1 15 KEYSTROKE MACRO & Address List 1 5 6 KEYSTROKE MACRO & Mailing List 1 5 6 KEYSTROKE MACRO and FIND, Usage 2 3 4 KEYSTROKE MACRO with FIND, Using 2 3 4 KEYSTROKE MACRO: Putting Lists Side-By-Side 1 3 5 Keyboard Customization for MSDOS Computers 2 5 4 Keyboard Customization for NorthStar Advantage 2 5 3 LOAD, use Tip 2 4 11 LOAD/UNLOAD & Multiple Linear Regression Calculations 2 3 6 LOAD/UNLOAD & Simultaneous Linear Equations 2 3 6 LOAD/UNLOAD, Use of 1 3 2 Lease Financing, Using T/Maker's NPV  LIST OF T/MUG ISSUES \VOLUME\\NUMBER\ \ DATE \ 1 1 Jan 82 1 2 Mar 82 1 3 May 82 1 4 Jul 82 1 5 Nov 82 1 6 Mar 83 2 3* May/Jun 83 2 4 Jul/Aug 83 2 5 Sep/Oct 83 2 6 Nov/Dec 83 3 1 Jan/Feb 83 * renumbering occurred no publication of Vol. 2 No. 1 or 2. LL, BERKELEY, CA 94720 642-9801 ? .nowedges \ CONTRIBUTOR:/ /FILE NAME:/ /RATING (1-5)-IDENTIFIER:\ 6.65) 02-16-84 Sold to Julius Blank MMUG-A 5.00 (171.65) 02-16-84 So 2 4 10 Loan Payments, Calculating 3 1 17 Lotus 1-2-3 with T/Maker 2 4 7 MACRO method of Converting Minuses to Parentheses 2 3 12 MACRO, KEYSTROKE and FIND, Usage 2 3 4 MACRO, KEYSTROKE, Use with a Mailing List 1 5 6 MACRO, KEYSTROKE, Use with an Address List 1 5 6 MERGE use to Create Columns of Text 2 4 3 MERGE, use Tip 2 4 10 Mailing List used to Personalize Letters & Envelopes 1 5 6 Mailmerge, T/Maker and the Crashed Drive Caper 2 4 9 Managing Ratios, for a Financial Statement 1 2 10 Measures of Association, Tables & (Survey Data III) 2 4 12 Measures of Association, Tables & (Survey Data IV) 2 5 13 Membership System - Accounting Summaries & Reports 1 4 11 Membership System -CRCK.DOC This is a cyclic-redundancy-checker (CRCK). It reads one or more files and returns a 16-bit code. If you find another file with the same 16-bit code (called a CRC) then chances are about 65,000 to one that the two files are the same. So, I am putting a file of CRCs on this disk, each program on this disk has a CRC. If you suspect that you don't have a good copy, just run, for instance: CRCK D.COM and you will see the CRC for the program D.COM. You can then compare it with the CRC for C.COM (in the CRC list) and see if they are the same. You can run CRCK *.* to get all the CRCs on the screen or run CRCK *.* F to put all the CRCs onto a disk file. dave N!\F   {:O!P ~ $ɷ_!# <~# Fqu $ end restore aker's Net Present Value 1 2 5 NUK Micro uses Japanese T/Maker III called Micro REPO 2 3 3 Negative & Positive Percent Change Calculations 1 4 13 Net Present Value (NPV), T/Maker's 1 2 5 New Contracts for T/Maker 2 5 2 New Distributors of T/Maker 2 6 1 New Packaging of New T/Maker Documentation 3 1 2 News on OEMs' 2 3 3 Numerical Data Analysis Software Advertisement 2 5 6 Numerical Data Analysis with T/Maker (Advertisement) 2 5 6 OEM Agreements with Advanced Logic Systems & Sperry 3 1 1 OEM News 2 3 3 One Drive Mailmerge with T/Maker, the Crashed Drive 2 4 9 Opening an IRA 1 3 9 Other Programs and T/Maker 2 4  VOLUME 002 DESCRIPTION: NUMEROUS UTILITIES, GAME, T/MAKER INDICES, RESTORE & PATCHES NUMBER SIZE NAME COMMENTS 002.1 4K -EBMMUG .002 DISK NAME & CONTENTS OF VOLUME 002 (APR 5,'84) 002.2 24K 123A2S+ .NDX T/MAKER III'S T/MUG NEWSLETTER INDEX A - S 002.3 8K 123T2Z+ .NDX SAME AS ABOVE FOR T - Z 002.4 14K ALIENS .COM ALIEN INVASION GAME WITH 6 VARIATIONS 002.5 4K CPM3UPD .SUB CP/M 3.0 PATCHES FOR BDOS & ".SPR" FILES 002.6 2K CRCK .DOC DOCUMENTATION FOR CYCLIC-REDUNDACY CHECKER 002.7 12K CRCK4 .ASM SRC (SOURCE CODE) FOR CRCK VER. 4.2B 002.8 2K CRCK4 .COM COMMAND FILE FOR VER. 4.2B CRCK FILE CHECKER 002.9 2K CRCK44 .COM COMMAND FILE FOR VER. 4.4 CRCK FILE CHECKER 002.10 2K CRCKLIST.CRC A LISTING OF CRCK'S FOR ALL FILES ON THIS DISK 002.11 4K D .DOC DOCUMENTATION FOR ALPHABETIZED DIRECTORY LIST 002.12 4K D .OBJ RENAME TO .COM FOR COMMAND FILE 002.13 8K DU .COM DISK UTILITY VER. 8.3 FOR CP/M 3.1 ETC. 002.14 12K DUCPM3 .DOC DISK UTILITY DOCUMENTATION FOR ABOVE 002.15 4K DUERASE .DOC DOCUMENTATION TO UNERASE A FILE WITH DU 002.16 2K EBMDIR02.TXT DIRECTORY OF THIS DISK 002.17 10K LTYPE .COM COMMAND FILE TO TYPE A FILE IN A LIBRARY 002.18 36K LU300 .DOC DOCUMENTATION FOR LIBRARY UTILITY VER 3.00 002.19 88K LU300 .LBR LIBRARY OF THE VER 3.00 LIBRARY UTILITY 002.20 4K PEEK .ASM SRC FOR THE PEEK UTILITY 002.21 2K PEEK .COM TRACE FILE-RELATED BDOS CALLS & DISPLAY INFO 002.22 2K PEEK .SUB SUBMIT FILE FOR PEEK 002.23 14K PEEKBDOS.ASM SRC FOR THE PEEK BDOS CHANGES & DOCUMENTATION 024.24 20K PEEKBDOS.PRN THE PRINT FILE FOR THE PEEK BDOS 002.25 8K PMCRX .ASM RX-MODIFICATION OF RECV VER. 2.0-FILE REC.UTIL. 002.26 2K PMCRX .COM RECEIVE CP/M FILE FROM SERIAL LINK (MODEM) 002.27 12K PMCTX .ASM TX-MODIFICATION OF SEND VER. 2.0-FILE TRANS.UTL 002.28 2K PMCTX .COM SEND CP/M FILE TO SERIAL LINK (MODEM) 002.29 8K RESTORE .ASM SRC FOR VOLUME 002 DESCRIPTION: NUMEROUS UTILITIES, GAME, T/MAKER INDICES, RESTORE & PATCHES NUMBER SIZE NAME COMMENTS 002.1 4K -EBMMUG .002 DISK NAME & CONTENTS OF EBMMUG.002 (APR 5,'84) 002.2 24K 123A2S+ .NDX T/MAKER III'S T/MUG NEWSLETTER INDEX A - S 002.3 8K 123T2Z+ .NDX SAME AS ABOVE FOR T - Z 002.4 14K ALIENS .COM ALIEN INVASION GAME WITH 6 VARIATIONS 002.5 4K CPM3UPD .SUB CP/M 3.0 PATCHES FOR BDOS & ".SPR" FILES 002.6 2K CRCK .DOC DOCUMENTATION FOR CYCLIC-REDUNDACY CHECKER 002.7 12K CRCK4 .ASM SRC (SOURCE CODE) FOR CRCK VER. 4.2B 002.8 2K CRCK4 .COM COMMAND FILE FOR VER. 4.2B CRCK FILE CHECKER 002.9 2K CRCK44 .COM COMMAND FILE FOR VER. 4.4 CRCK FILE CHECKER 002.10 2K CRCKLIST.CRC A LISTING OF CRCK'S FOR ALL FILES ON THIS DISK 002.11 4K D .DOC DOCUMENTATION FOR ALPHABETIZED DIRECTORY LIST 002.12 4K D .OBJ RENAME TO .COM FOR COMMAND FILE 002.13 8K DU .COM DISK UTILITY VER. 8.3 FOR CP/M 3.1 ETC. 002.14 12K DUCPM3 .DOC DISK UTILITY DOCUMENTATION FOR ABOVE 002.15 4K DUERASE .DOC DOCUMENTATION TO UNERASE A FILE WITH DU 002.16 2K EBMDIR02.TXT DIRECTORY OF THIS DISK 002.17 10K LTYPE .COM COMMAND FILE TO TYPE A FILE IN A LIBRARY 002.18 36K LU300 .DOC DOCUMENTATION FOR LIBRARY UTILITY VER 3.00 002.19 88K LU300 .LBR LIBRARY OF THE VER 3.00 LIBRARY UTILITY 002.20 4K PEEK .ASM SRC FOR THE PEEK UTILITY 002.21 2K PEEK .COM TRACE FILE-RELATED BDOS CALLS & DISPLAY INFO 002.22 2K PEEK .SUB SUBMIT FILE FOR PEEK 002.23 14K PEEKBDOS.ASM SRC FOR THE PEEK BDOS CHANGES & DOCUMENTATION 024.24 20K PEEKBDOS.PRN THE PRINT FILE FOR THE PEEK BDOS 002.25 8K PMCRX .ASM RX-MODIFICATION OF RECV VER. 2.0-FILE REC.UTIL. 002.26 2K PMCRX .COM RECEIVE CP/M FILE FROM SERIAL LINK (MODEM) 002.27 12K PMCTX .ASM TX-MODIFICATION OF SEND VER. 2.0-FILE TRANS.UTL 002.28 2K PMCTX .COM SEND CP/M FILE TO SERIAL LINK (MODEM) 002.29 8K RESTORE .ASM SRC FOR---> 123A2S+ .NDX CRC = C2 06 ---> 123T2Z+ .NDX CRC = AD 47 ---> T/MUG .LST CRC = 2C F6 ---> CRCK .DOC CRC = C5 8A ---> -EBMMUG .002 CRC = 9D A1 ---> CRCKLIST.CRC CRC = 84 14 ---> PEEKBDOS.ASM CRC = 73 35 ---> DU .COM CRC = 9A F8 ---> DUCPM3 .DOC CRC = 0B CE ---> CRCK4 .ASM CRC = C0 EB ---> DUERASE .DOC CRC = F7 C7 ---> ALIENS .COM CRC = 40 35 ---> LU300 .DOC CRC = 82 DB ---> LU300 .LBR CRC = 43 77 ---> PEEK .SUB CRC = E1 27 ---> PEEKBDOS.PRN CRC = 10 B9 ---> PEEK .ASM CRC = C0 81 ---> PEEK .COM CRC = FA 04 ---> PMCRX .ASM CRC = 11 68 ---> TSETOFF .ASM CRC = 64 20 ---> TSETON .ASM CRC = 07 36 ---> CPM3UPD .SUB CRC = 69 9B ---> USQ .COM CRC = DB D3 ---> PMCRX .COM CRC = F2 F2 ---> LTYPE .COM CRC = 43 69 ---> SQ .COM CRC = AE BE ---> PMCTX .ASM CRC = E8 20 ---> PMCTX .COM CRC = FF 58 ---> SWEEP .COM CRC = CE 4B ---> RESTORE .COM CRC = C4 4D ---> CRCK4 .COM CRC = B8 F5 ---> CRCK44 .COM CRC = 25 40 ---> D .OBJ CRC = 6F 88 ---> EBMDIR02.TXT CRC = B6 EA ---> RESTORE .ASM CRC = 63 7A ---> RX/TX .DOC CRC = 85 16 ---> D .DOC CRC = 2C 17 DOC CRC = F7 C7 ---> ALIENS .COM CRC = 40 35 ---> LU300 .DOC CRC = 82 DB ---> LU300 .LBR CRC = 43 77 ---> PEEK .SUB CRC = E1 27 ---> PEEKBDOS.PRN CRC = 10 B9 ---> PEEK .ASM CRC = C0 81 ---> PEEK .COM CRC = FA 04 ---> PMCRX .ASM CRC = 11 68 ---> TSETOFF .ASM CRC = 64 20 ---> TSETON .ASM CRC = 07 36 ---> CPM3UPD .SUB CRC = 69 9B ---> USQ .COM CRC = DB D3 ---> PMCRX .COM CRC = F2 F2 ---> LTYPE .COM CRC = 43 69 ---> SQ .COM CRC = AE BE ---> PMCTX .ASM CRC = E8 20 ---> PMCTX .COM CRC Files: 37 space used: 362k (24k free) -EBMMUG .002 4k : D .DOC 4k : PEEK .COM 2k : RX/TX .DOC 2k 123A2S+ .NDX 24k : D .OBJ 4k : PEEK .SUB 2k : SQ .COM 6k 123T2Z+ .NDX 8k : DU .COM 8k : PEEKBDOS.ASM 14k : SWEEP .COM 28k ALIENS .COM 14k : DUCPM3 .DOC 12k : PEEKBDOS.PRN 20k : T/MUG .LST 2k CPM3UPD .SUB 4k : DUERASE .DOC 4k : PMCRX .ASM 8k : TSETOFF .ASM 2k CRCK .DOC 2k : EBMDIR02.TXT 0k : PMCRX .COM 2k : TSETON .ASM 2k CRCK4 .ASM 12k : LTYPE .COM 10k : PMCTX .ASM 12k : USQ .COM 2k CRCK4 .COM 2k : LU300 .DOC 36k : PMCTX .COM 2k : CRCK44 .COM 2k : LU300 .LBR 88k : RESTORE .ASM 8k : CRCKLIST.CRC 2k : PEEK .ASM 4k : RESTORE .COM 2k :  .COM CRC = AE BE ---> PMCTX .ASM CRC = E8 20 ---> PMCTX .COM CRC = FF 58 ---> SWEEP .COM CRC title 'BDOS-PEEK RSX for CP/M 3.0' ; ; **************************** ; * PEEKBDOS.ASM * ; * Version 1.0 * ; * Copyright (c) 1983 * ; * by * ; * Ron Fowler * ; **************************** ; ; This program is an RSX running under CP/M 3.0 only. It's purpose ; is to trace file-related BDOS calls, and display information ; regarding each on the auxilary, console or list devices. It is ; useful for debugging programs or just finding out what's up when ; the disk drive light goes on! ; ; PEEK's output device defaults to the system console, and can be ; changed by typing "PEEK A" for auxilary, "PEEK L" for the list device ; (usually the printer) or "PEEK C" for the console. Note that ; "PEEK P" sets the pause flag, causing the trace to pause after ; the call to bdos. Note that also "*" is printed at the pause then ; waits for a character. Any character other than "Q" will simply cause ; a return to the caller, which is "PEEK.COM" in this initial system. ; A "Q" at pause time will reset the pause flag, and from then on the ; program displays without pausing. ; ; "PEEK Q" removes the RSX from memory. ; ; ; ; Output from the program for a disk operation is : ; ; operat: (005C) 00 ??????????? ex=00 s1=00 s2=00 rc=00 nr=00 Ret: 02 ; | | | | | | | | | | ; | | | | | | | | | bdos data ; | | | | -----fcp parameters------ returned in ; | | | fcb file name A register ; | | fcb disk drive (default=0, a=1, etc.) ; | DE registers at call time (i.e. fcb address or dma) ; 6 character code for operation type, see "fnctbl:" in this listing ; ; ; ; Note that this RSX uses one level of caller's stack. Also, if you ; modify this code, be VERY careful with the registers; those saved are ; only the one's absolutely necessary, in order to conserve memory. ; ; To compile into "PEEK.COM", you must have "PEEK.ASM" on your disk ; and type the following commands (which are in "PEEK.SUB") ; ; MAC PEEK $$PZSZ ; RMAC PEEKBDOS $$PZSZ ; HEXCOM PEEK ; LINK PEEKBDOS [OP] ; RENAME PEEKBDOS.RSX=PEEKBDOS.PRL ; GENCOM PEEK PEEKBDOS ; ; For further information see the CP/M+ Programmer's guide and the article ; from which this program was copied, Microsystems Vol. 5 No. 2, Feb '84 ; ; WRITTEN BY ; ; Ron Fowler ; Fort Atkinson, WI ; 08/22/83 ; ; Update information: ; ; If you update this program, please pass along a copy to Fort Fone File ; Folder (FFFF) RCP/M, Fort Atkinson, WI, (414)-563-9932 (no ringback). ; PLease update the version number in both modules ("PEEK.ASM" as well) ; ; Updates (in reverse order to minimize human reading time) : ; ; 1.0 original written by Ron Fowler 08/22/83 ; ; ; ************************************************************************ ; I typed in this program from Microsystems magazine. I changed some ; comments for one's which made more sense to me. Absolutely no changes ; in the assembler code were made. I could not get the program to run ; using the compilation method in the Microsystems article so I used the ; example in the back of the CP/M+ Programmer's Guide to get "PEEK.SUB". ; I had to put "ORG 100h" at the beginning of the "PEEK.ASM" code. ; ; Tony Brand ; Santa Cruz, CA ; 01/31/84 ; ************************************************************************ ; conotf equ 2 ; output character to console auxotf equ 4 ; aux output lstotf equ 5 ; list device output diriof equ 6 ; direct console i/o printf equ 9 ; print string function openf equ 15 ; open file closf equ 16 ; close file srchf equ 17 ; search for 1st file occurence srchn equ 18 ; search for next file occurence erasf equ 19 ; erase file readf equ 20 ; read sequential writf equ 21 ; write sequential creat equ 22 ; create file renmf equ 23 ; rename file sdmaf equ 26 ; set dma transfer address rdran equ 33 ; read random wrran equ 34 ; write random ; ; character equates ; cr equ 13 ; carriage return lf equ 10 ; linefeed ; ; RSX prefix header ; db 0,0,0,0,0,0 ; space for CP/M3 to insert serial # jmp begin ; jump to entry point next: db jmp ; jump instruction op-code dw 0 ; next RSX module or loader dw 0 ; previous RSX or 0 rmvflg: db 0 ; removes RSX when non-zero db 0 ; flag for non-banked system only myname: db 'PEEKBDOS' ; our name db 0 ; loader flag db 0,0 ; reserved ; ; This is the BDOS call intercept. Here we determine if the call is ; one of those ws process. If not, we simply pass control on ; to the next module. ; begin: mov a,c ; get function code cpi 60 ; for RSX only? jz rsxfnc ; go if so lxi h,fnctbl ; nope, test for one of ours scan: mov a,m ; get first/next table opcode inx h ora a ; end of table? jz next ; then quit now cmp c ; ours? jz trap ; go trap if so mvi a,6 ; nope, calculate next table entry call addha jmp scan ; continue ; ; Here when we've determine taht we must display the system call. ; ; First save caller's stack pointer and load a local stack. ; trap: shld tblptr ; save pointer to function string lxi h,0 ; get user's sp dad sp shld spsave lxi sp,stack ; load local stack ; ; begin the trace: do newline, the print the function string ; mvi a,cr ; carriage return call type mvi a,lf call type lhld tblptr ; get string pointer call prathl ; print it call ilprnt ; colon, open paren db ': ' db '('+80h ; ; print the fcb (or dma) address ; mov a,d ; get parameter hi byte call hexout mov a,e ; then lo call hexout call ilprnt ; closing paren db ')',' '+80h mov a,c ; get function code cpi sdmaf ; set-dma? jz exit ; then done ; push d ; save fcb pointer ldax d ; get drive code inx d call hexsp ; print hex byte for drive, space ; mvi b,11 ; next 11 characters are file name fnprnt: ldax d ; get first/next character inx d ; advance fcb pointer call type ; print it dcr b ; 11 characters done? jnz fnprnt mvi a,' ' ; print space call type ; ; print ex, s1, s2, etc. ; mvi b,4 ; four of these lxi h,idbase ; get ascii id table for each field idloop: call prathl ; print id ldax d ; get field inx d ; advance fcb pointer call hexsp ; print in hex, space dcr b ; all 4 jnz idloop ; ; print the nr field ; call prathl ; last id string lxi h,16 ; offset to nr field dad d mov a,m ; fetch it call hexout ; print it pop d ; restore fcb pointer ; ; here after fcb info printed. Allow call to pass upward, then print ; the returned value. ; exit: call next ; give call to bdos shld hlsave ; save returned registers push d push b push psw ; save returned value lxi h,rtnmsg ; print " Ret: " call prathl pop psw ; restore, resave returned A reg push psw call hexout ; print it in hex lda pause ; do a pause? ora a jz nopaus ; jump if not call ilprnt ; yes, print pause prompt db ' ','*'+80h mvi c,diriof ; get a character mvi e,0FDh ; don't come back until we've got one call next ani 5Fh ; convert char to upper case cpi 'Q' ; quit-pause? jnz nopaus ;no... jump xra a ;yes sta pause nopaus: pop psw ; restore them all pop b pop d lhld spsave ; restore stack pointer sphl lhld hlsave ret ; return to caller ; ; handler is for function 60: call RSX. Here we insure that the ; call is for us. The RSX parameter block passed in DE must ; contain two parameters, the 1st of which is the pointer to our ; name (near absolute insurance that there won't be any confusion). ; The 2nd parameter is a pointer to a request code (one of : ; "Q", quit, "C", console, "L", list, "A", aux). ; rsxfnc: push d ; save user de xchg ; rsx pb pointer to hl inx h ; ignore function code mov a,m ; get # parameters cpi 2 ; two ? jnz pass ; quit if not inx h ; skip # of parameters mov e,m ; fetch parameter #1 inx h mov d,m inx h ; hl points to nd parameter shld spsave ; save that pointer lxi h,myname ; check for our name mvi b,8 ; 8 characters in name ckname: ldax d ; compare first/next character inx d cmp m ; compare with our name inx h jnz pass ; if fails, pass to next rsx dcr b ; all 8 jnz ckname ; ; rsx request is for us, get rsx pointer, load 2nd parameter ; pop d ; ; call next rsx's -- we may be an accidently loaded rsx (which ; will happen when the tpa module is used only for communication ; with us). PEEK always returns 0, CP/M returns 0FFh. So..... ; unless we get an FFh back, there are more of us in memory, ; and we are only a clone, and must commit suicide! ; call next ; are we real? cpi 0FFh ; a = 0FFh? jz wereal ; jump if so lxi h,rmvflg ; sad....but....bye bye mvi m,0FFh ret ; wereal: lhld spsave ; get rsx pointer mov a,m ; fetch next parameter inx h mov h,m ; into hl mov l,a ; hl points to request inx h ; point to pause flag mov a,m ; fetch it cpi 0FFh ; null? (don't alter pause flag) jz pntreq ; jump if so sta pause ; no, stuff it pntreq: dcx h ; point to request mov a,m ; fetch request ; ; A now has the function request character passed from the tpa ; cpi 'Q' ; quit? jz quit cpi 'A' ; output to aux? mvi c,auxotf ; prep function code jz setout cpi 'C' ; output to console? mvi c,conotf ; prep code jz setout mvi c,lstotf ; process of elimination (list) setout: mov a,c ; get new output device code sta curdev ; stuff it xra a ; return A=0 ret ; ; here when call 60 is not for us ; pass: pop d ; clear stack jmp next ; to next rsx ; ; here to quit ; quit: mvi a,0FFh ; flag loader to remove us sta rmvflg xra a ; we still return 0 ret ; ; *************** ; * subroutines * ; *************** ; ; print in-line message terminated by char with bit 7 = 1 ; ilprnt: xthl ; message pointer to hl call prathl ; print it xthl ret ; ; print string pointed to by hl, until char with bit 7 = 1 ; prathl: mov a,m ; fetch 1st/next character inx h ; advance pointer call type ; print it ani 80h ; terminator? jz prathl ; continue if not ret ; ; output A in hex followed by a space ; hexsp: call hexout ; print it mvi a,' ' jmp type ; ; output A as 2 hex digits ; hexout: push psw ; save it rrc ; hi nybble into lo rrc rrc rrc call nybble ; print it pop psw ; now restore , fall into lo nybble: ani 0Fh ; zap any garbage in hi nybble adi 90h ; this little beauty... daa ; ... is from the old (and maybe aci 40h ; ... still existing) Intel library daa ; fall into type ; ; type char in A on console via current output device ; type: push psw ; save all push h push d push b ani 7Fh ; allow no parity bits to pass mov e,a ; align character lda curdev ; get device function code mov c,a call next ; output the character pop b ; clean up pop d pop h pop psw ret ; ; add a to hl ; addha: add l mov l,a rnc inr h ret ; ; Table of locally processed system function calls. Format is function ; coe followed by id string. Note that more functions may be added to ; this table, but if they are not fcb-related functions, you'll have to ; modify the trap routine to process the new data types. ; fnctbl: db openf,'opnfi','l'+80h db closf,'clsfi','l'+80h db readf,'rd_se','q'+80h db writf,'wr_se','q'+80h db sdmaf,'setdm','a'+80h db srchf,'srchf','l'+80h db srchn,'srchn','n'+80h db renmf,'renam','e'+80h db erasf,'erase',' '+80h db rdran,'rd_ra','n'+80h db wrran,'wr_ra','n'+80h db creat,'creat','e'+80h ; db 0 ; ; Table of fcb id strings ; idbase: db 'ex','='+80h db 's1','='+80h db 's2','='+80h db 'rc','='+80h db 'nr','='+80h ; rtnmsg: db ' Ret:',' '+80h ; ; data area ; curdev: db conotf pause: db 0 tblptr: dw 0 hlsave: dw 0 spsave: dw 0 ds 24 ; stack: ; ; end * & ~2 — ! 6:  ~Ү 52 : : ͅ* M%! 4w [ =ͷ\26 =:6 :6 o&"7 E"9 G"; I"= "? "A "C .*7 DM -J :\2 ͅX ͑:%ͅXͷ*9 E)*; G)*= I)*? )*A )*C )!; \e .*; \ - 26 * ~ * ~ H * #" !`i^#V#~#fo:  y  wO G:L xAڠ Ҡ a{3 _à  F F : i`N#Fogo&og_{_z#Wrcentage Difference (Survey Data III) 2 4 15 Epson Printer, Double Print Feature with PRINT.UTL 1 4 12 Equations in T/Maker, Basic ("What Does This Mean?") 1 2 3 Equipment Replacement With Discounting 1 2 7 Evaluating Job Candidates (ranked/ordered) 1 5 1 FETCH, use Tip 2 4 10 FETCH, STORE & in T/Maker Basic Equations 1 2 3 FETCH, Used to get a zero 1 2 2 FIND and KEYSTROKE MACRO usage 2 3 4 FIND, Using Keystroke Macro with 2 3 4 Fancy Font Software for the T/MUG 2 3 4 Federal Income Tax Form, 1040 1 1 20 Files, Data to Different with T/Maker 2 6 8 Financial Statements for a Business 1 2 10 Form Letter Generator, Simple 2 6 4 FoDU.COM v8.3 10/18/83*."j "r}0! 6! "Q!0"y*""""0қ"":"5"""$":rʇ"Û*.!"!"t DISK UTILITY ver 8.3 Universal Version under :s>M>C͠P/M :r>0:͠>.͠0͠ Type ? for help Type X to exit !~ZGZ##> !a2i>2Q2R12S>2f!"MZ:e ~ Z;#i͆2+ -@ =4<ʷ>#r?A< B Cm D< Fs G^ H< L MNCPʪQTR!S^ T^ UʋVʽWʊXHYJZʵ/Z(>2i?Z:T/2Ti 2i+++ OUT OF MEMORY +++ ZDisk Information: Tracks: *l# Sec/trk: * Sec/trk 00: *p Grpsize: :] xZ¿i͖̖͌O$i~ t;t͆#AOy2k9> C:rX|2^#V+"t! ~#fo*9*^|2j  *"Z!"\*#ͥͥDM,BK:=P*Z*\9͈ ! x—x:ͭ:ͭV{BK͠>-͠> 2x*#} |/:z#{ ͠B ͠B|*V0 |ʌ~> T>(͠~ͬ#ͷ>.͠ͷ:x͠~ͬ~> †>)͠ä ++FREE++ :S2S|>:͠~# ~͐͠·*#"b!"v!,:T#~3~!3~_#~3:W#͑/*v|+>*2x"v *b+"b|*v:G:zҔ:he*y!LAST ADDR=*y "y+|ͬ}ͬ i2i++ YANK MEMORY FULL ++ i:he!>2Yi:Y!i2i++ NO "<" SAVE COMMAND ISSUED ++ Z~#ɯ2h4!6 ý ͈G~{2:f›*M}͈ 2f*\9*Z !~#"M:hC V{!5 ~# ~    ~͐ ,5 ͈ *\9*Z ++ EOF ++ |ý :h« 2i++ Can't dump, no sector read ++ 2iUse G command following F, or R or S following T Z~;ʶ ¿  BK ; #`i}ͬ:A ~ͬ}}{ #} Z:HQ ~ ) ~+ >.͠{: #} |Z{ i|{ i~;j n Tʁ Sʝ G 2͗*l͹ڼ >2gý ͗z2* ͹292g **Z͹**\+:G}2X:Gͥ "V*2e:d2X- o&"V0 V*͹ڼ"V2XE 92g bk:)=J :Xo*͝_ ** # >2e\  \<¹ 2d++ FILE NOT FOUND ++ i=2do&))))) >D2 ~.  ; ͆# ~ ;#.2#>  ~ ! ;! Vz2͈ z! *\9*Zý ~ V ;V Vz2*\+|{ *Z|t *l"Z*n{ +"Z*"\zV * *\#* ͹Һ *Z#*l͹ҭ "Z!"\*l*Z͹ڴ *n͹Ҵ í ͗z * *͹2"pi*Z| *p i**Z͹> G=*VDM͠>:͠:Xͬ>,͠ T=*Z, S=*\, PS=*^|~͆##-Š #BKÏ ,2H A2~ i;i ڳ ~ҳ ù ͐ü ͠"s#y i*š ~ i;i2#~ i;i, "OV{ͬyi*O ~ i;i2:g.i2i++ Can't read - not positioned ++ Position by: Track then Sector, or Group i^i><ͬ͠>>͠:ʫxͬy͵ ھ0à  |{0͠> à>*àZ~͖Z ͠#~#Vz({(ƀ_ɯ2i++ BAD DISPLACEMENT (NOT 0-7F) ++ Z~#ʖ~͆ ;,->#02:ډA2G20))))o_#~͆ ;,-#02:20bk)))o|gÚ :!͖Oo W9 w#͠+>*͠w͠> ͠!ɯo+y3~͠DD:S  $6 |!~ ͠#a>^͠>U͠> ͠> à`_O ¹> ͠:a©   :iy >2a :a<2a:U>*l͹ڼ"ZBK4> *"\*Z͹`in+:2`:jWͥc#DM}:j¥+å*t ڐ>Ó:›g:r¥&i"^DMڷ> ɯ2i++ Not within tracks 0-*l ++ Z`i"{> >2h#**{\2i++ READ failed, sector may be invalid ++ :h—2i++ CANNOT WRITE UNLESS READ ISSUED ++ m ڵ¼*{>ø2i++ WRITE failed ++ > > :` =:r0""`i"2}}2 Operands in brackets [...] are optional Numeric values: 'n' are decimal, 'x' hex +[n] step in [n] sectors -[n] step out [n] sectors # print disk parameters for current drive =Abc search for ASCII Abc from current sector caution: upper/lower case matters use for hex: to find "IN 0" use: =<0> or "(tab)H,0(CR)(LF)" use: =<9>H,0 < save current sector into memory buffer > restore saved sector ( toggle map display of erased files ? help (displays this guide) A[ff,tt] ASCII dump B[nn] Boot track number of sectors per track [More] CHANGE: CHaddress,byte,byte... (hex) CAaddress,data... (Ascii) Allowed for imbedded hex CHfrom-through,byte, e.g. CH0-7F,E5 CAfrom-through,byte D[ff,tt] Dump (hex+ASCII) Fn.t Find file Gnn CP/M Allocation Group nn H[ff,tt] hex dump L Log in drive Lx Log in drive x M[nn] Map [from group nn] [More] N New disk P Printer toggle switch Q Quiet mode (no msgs) R Read current sector Snn Sector nn Tnn Track nn Unn User nn for Find command (CP/M-2 only) V[nn] View [nn] ASCII sectors W Write current sector X Exit program Y Yank current sector into seq. memory Z[nn] Sleep [nn tenths] /[nn] Repeat [nn (decimal) times] [More] Cancel a function with C or Ctl-C Suspend output with S or Ctl-S Separate commands with ";" Example: G0 +;D;Z#20;/ would step in, dump, sleep 2 seconds and repeat until CTL-C is typed All "nn" usage except "/", "T", and "S" are hex (use #nn for decimal) (See DU.DOC for complete examples) iyʛ#x}/o|/g#ɷ|g}oҴ ¯}o|gBKx! T]x :r*"p1*.:^#""p^#"~#2~#2^#"^#"^"!X~:w*E "n"lwLL, BERKELEY, CA 94720 642-9801 ? .nowedges \ CONTRIBUTOR:/ /FILE NAME:/ /RATING (1-5)-IDENTIFIER:\ 6.65) 02-16-84 Sold to Julius Blank MMUG-A 5.00 (171.65) 02-16-84 So 3 Personal Micro Computer, Inc. Meetings w/ T/Maker 2 5 1 Personalized Letters & Envelopes, Mailing List for 1 5 6 Portfolio Appraisal, Security How to Generate 1 3 2 Portfolio Appraisal, Stock How to Generate 1 3 2 Positive & Negative Percent Change Calculations 1 4 13 Printing Many Documents 2 5 11 Printing the Labels (from mailing list) 2 6 6 Printing, Suppressing Particular Values For a Row 1 2 2 Product Information on T/Maker 2 5 2 Profitability Ratios for a Financial Statement 1 2 10 Program for Payroll with T/Maker 2 4 4 Programmers, T/Maker Applications (List) 2 5 2 Programs, Other and T/Maker 2 4 7 Projecting Costs for Software (projecting budget) 1 5 11 Purchase, Using T/Maker's NPV  RESTORING AN ERASED FILE ON DISK 002.30 2K RESTORE .COM COMMAND FILE FOR ABOVE 002.31 2K RX/TX .DOC DOCUMENTATION FOR THE FILE TRANSMISSION/RECEIVE 002.32 6K SQ .COM THE COMMAND FILE FOR THE SQUEEZE UTIL. VER. 1.1 002.33 28K SWEEP .COM THE COMMAND FILE FOR THE SWEEP UTILITY VER. 3.7 002.34 2K T/MUG .LST A LISTING OF THE T/MUG NEWSLETTERS-VOL./#/DATE 002.35 2K TSETOFF .ASM DISABLE 25TH LINE OF THE QUME VT102 TERMINAL 002.36 2K TSETON .ASM ENABLE THE 25TH LINE OF THE QUME VT102 TERMINAL 002.37 2K USQ .COM COMMAND FILE FOR UNSQUEEZE UTILITY VER. 1.19  024.24 20K PEEKBDOS.PRN THE PRINT FILE FOR THE PEEK BDOS 002.25 8K PMCRX .ASM RX-MODIFICATION OF RECV VER. 2.0-FILE REC.UTIL. 002.26 2K PMCRX .COM RECEIVE CP/M FILE FROM SERIAL LINK (MODEM) 002.27 12K PMCTX .ASM TX-MODIFICATION OF SEND VER. 2.0-FILE TRANS.UTL 002.28 2K PMCTX .COM SEND CP/M FILE TO SERIAL LINK (MODEM) 002.29 8K RESTORE .ASM SRC FOR Data II) 2 3 7 SAVE use to Create Columns of Text 2 4 3 SAVE, Use with RESET (Recommended) 1 4 12 STORE & FETCH in Basic T/Maker Equations 1 2 3 STOREd, use Tip 2 4 10 Sample Means, Comparison of Two 1 1 26 Scores, Student Average Percentage, Calculating 1 6 10 Security Portfolio Appraisal, How to Generate 1 3 2 Setting up the Data Set (Analyzing Survey Data I) 1 6 4 Shareholders' Equity, Calculating for a Fin. Statment 1 2 10 Side-By-Side Lists, Putting (KEYSTROKE MACRO) 1 3 5 Simple Invoicing System, with T/Maker 1 6 14 Simultaneous Linear Equations & LOAD/UNLOAD 2 3 6 Single Values, Converting from Ranges of Values 2 5 8 Software Cost Projections (projecting budget) 1 5 11 Software, Other Programs with  DU-V83.DOC ---------- By Ward Christensen (revised 10/18/83) additional notes by Ron Fowler and Irv Hoff ; This version of DU is compatible with CP/M 1.4, 2.x and 3.x and does ; not require alteration for various hardware configurations. It ad- ; justs itself automatically to the correct number of sectors, tracks, ; directory size, etc. ; INDEX 1.0 INSTALLATION: 2.0 USE: 2.1 COMMANDS, BY FUNCTION 2.2 ALPHABETIC COMMAND SUMMARY 3.0 NOTES 4.0 INTERPRETATING DIRECTORY DATA 4.1 SINGLE DENSITY 4.2 DOUBLE DENSITY 1.0 INSTALLATION: === Because of the automatic adaption feature, no conditional assem- bly options are included. The only alteration that needs to be done is to use DDT to set the byte at 103H for your clock speed. Use 0 for 2MHz, 1 for 4MHz, 2 for 6MHz. (This only affects the 'Z' SLEEP command.) 2.0 USE: === An initial command string may optionally be placed as an operand of the original 'DU' command, i.e.: A>DU G0;D;G2;=OK<1A>;D for example, if you want to only map the disk, and then exit: A>DUU M;X Once 'DU' is running, it expects single-letter commands much like 'SID' OR 'DDT'. For ease of use, multiple commands may be placed on one line, separated by ";". In addition, a given command or string of commands may be repeated -- either indefinitely (until ^C is pressed) or a given number of times. To avoid an accidental ^C from dropping out of 'DU', only an ex- plicit "X" command will exit 'DU'. 2.1 COMMANDS, BY FUNCTION === HELP: ? displays the help guide POSITIONING: Gnn by allocation group Snn by sector Tnn by track +nn going ahead nn sectors -nn going back nn sectors I/O: R reads sector W writes sector < puts current sector "away" into a buffer > recalls previously saved sector DISPLAYING: G shows current group, track, sector M maps the disk -- where the files are located Mxx map starting at group xx D dump the sector (hex + ASCII) A dump sector in ASCII H dump sector in hex Vnn views (like CP/M type) nn sectors # shows disk parameters CHANGING: CHnn,VAL change data in hex CAnn,VAL change data in ASCII (with escape to hex) Unn change user to nn SEARCHING: FNAME find a file in the directory F find next occurrence (extent) of same name =Abc scan for Abc (IN ASCII) from current sector on (very slow, allow up to 15 minutes to scan an entire disk. Either finds the answer or says: "out of bounds". MISC: Bnn boot nn sectors per track LX log in disk X P printer toggle Q before a command does it 'quietly' X exit to CP/M Znn sleep (nn tenths of a second) to allow viewing data before it scrolls off ( toggles the map display to show/not show erased files /nn repeat previous command nn times (repeats indefinitely if nn omitted) 2.2 ALPHABETIC COMMAND SUMMARY === # PRINTS THE DISK PARAMETERS + Advance 1 sector (if below track 2, this advances to next numerical, if 2 or more, advances based on CP/M's normal sector scrambling algorithm, i.e., allows + to the next logical sector of the file. - backs up 1 logical sector NOTE: + and - may take an amount: For example, +15 advances 15 sectors / repeats entire command -- defaults to "forever" /nn nn may be 2 TO 65535 ( toggles the map display to show/not show erased files. When showing erased files '*' indicates that block duplicates a block in another file. It may not be possible to restore this program without errors. If there are no '*' in this complete file, it can be correctly restored. < saves current sector in a 'save' buffer =Abc ASCII search, starting at current sector. hex may be imbedded or used alone. To find: "IN 0FEH" use: = (Ignores bit 7 unless using .) Since ";" is a command delimiter, you have to use <3B> to search for a ";". Also, since "<" is a hex escape character, use << to mean a single "<". NOTE: This is a very slow routine. It can take 15 minutes or longer to search an entire double- density double-sided disk so be patient. It either finds the string or says: "OUT OF BOUNDS". > gets saved buffer. < and > maybe be used to move a sector to another place. ? displays the help guide A dump sector (ASCII only) CHADDR,VAL,VAL,VAL... change hex values in sector CAADDR,CHAR STRING... change ASCII calues in sector NOTE: may be hex imbedded in the ASCII string: CA00,OK<0D><0A><1A> ----> W writes changes to disk note that the 'C' command echoes the over- laid data for verification. Bnn boot nn sectors per track -- not all disks have 26. CHADDR-ADDR,BYTE repeats a change CAADDR-ADDR,BYTE repeats a change D dump sector (hex + ASCII) FNAME print directory for file "NAME", then positions to its directory sector. F find next occurrence of name in directory Gnn position to group nn and read G shows current position H dump sector, hex only L re-logs in the current disk -- you may pull out a disk, put in a new one, and "L" just to log it in. (see "logging in disk" in notes below) LX logs in disk 'X', such as: LB, LC, LA, etc. M dumps a map of the group allocations for files Mn shows which file is allocated to group "N" N resets CP/M via BDOS -- this may make it possible under some implementations of CP/M to change the disk format, i.e., density, sides, etc. P toggles the printer on/off Q quiet -- preceedintg any command, suppresses CRT output R reads into memory the sector currently positioned at. NOTE: 'R' (read) is implicit in the G, +, and - commands but NOT in the 'S' and 'T' commands Snn position to sector nn, and read TNN seek to track nn (no read) Ux logs user 'x' for next 'F' command V views the current sector -- assumes ASCII data Vnn views nn sectors W writes the current sector to disk NOTE: may NOT be used after an 'F' command as CP/M was used to find file in the directory X exit back to CP/M (must press return). ^C was too easy to hit over modem lines -- requires two bytes: (X,CR) to exit. Z sleep -- causes the porgram to pause -- such as to look at a dump. Z is 1 second Znn nn tenths of a second Z50 = 5 seconds 3.0 NOTES === * Multiple commands: May be separated by ";" EXAMPLE: The following commands will erase the B: disk directory to all  E5's: LB log in B: drive G0 position to directory CH0-7F,E5 fill with E5 < save the sector >;W;+;/16 restore, write, next, repeat 16 ---- this could be shortened to: LB;G0;CH0-7F,E5;< >;W;+;/16 * DUMP COMMANDS: All dump commands (D, A, H) may be optionally followed by a starting and ending address: D0,7F the same as just 'D' D3,5 A20,3F * LOGGING IN DISK: If you have a disk with a 'blown directory', try logging in a good disk of the same density, then put in the 'blown' disk without logging it in. You are opening yourself to possible problems because of the buffering of physical sectors in the 'BIOS'. The best technique, (but not guaranteed), would be to seek to the unused inner tracks of the first disk, do the read, then change disks. That way, if it write anything, you won't have destroyed anything -- assuming the disk is not completely full. Another technique (assuming the second disk does not contain a CP/M syst em, would be to seek to track 1, do the read there, then change disks to the blown one. 4.0 INTERPRETATING DIRECTORY DATA === 4.1 SINGLE DENSITY === The following explains the format of a CP/M directory entry as shown by 'DU', using either the 'F' (find file) command, or just doing 'D' (dump) of the directory sectors, which are located in groups 0 and 1 on a single-density disk. SAMPLE RESULT OF 'FSID.COM' COMMAND: 40 00534944 20202020 20434F4D 0000003A *.SID COM...:* 50 33343536 3738393A 00000000 00000000 *3456789:........* FIRST LINE - 40 00534944 20202020 20434F4D 0000003A *.SID COM...:* || ||| | || || | | || ||^---hex file name/type--^ || || ^file name^ || || || || in ASCII || || extent-^^ || || || || || || file size in sectors-^^ || || || ^^-00 = file active other values (E.G 03) = user # || E5 = file erased ^^-displacement of line in directory sector SECOND LINE - 50 33343536 3738393A 00000000 00000000 *3456789:........* | | | | | ^- allocation groups ^-----allocation group numbers-----^ just happened to be printable 4.2 DOUBLE DENSITY === The following is a sample of 'FSID.COM' running on a double- density system: :FSID.COM 00 00534944 20202020 20434F4D 0000003A *.SID COM...:* 10 38003900 3A003B00 00000000 00000000 *8.9.:.;.........* G=0000:00, T=2, S=1, PS=0 The primary difference is that the groups now occupy 2 bytes, i.e., 38 00" "39 00" ... this follows the Intel and CP/M convention of putting 16-bit values high-byte-first. This it means group 0038, 0039 etc. Note that in double-density, each group stood for 2k not 1K, so there were half as many groups for the same file. Be very careful when patching a directory under double-density. For exmaple: CH10,38,39,3A,3B... This might try to access group 3938 with resultant angry noise from the disk stepper as it attempts to find where it should go for the data. (Note from Irv Hoff -- this document has not been updated for several years. There are so many options and so many different systems it now supports that I cannot be sure everything is completely current.) COM' running on a double- density system: :FSID.COM 00 00534944 20202020 20434F4D 0000003A *.SID 5.00 (151.65) 03-01-84 Sold to Ed Spitzer 010, 011, 012 & 013 @ $2 ea. 8.00 (143.65) 03-01-84 Sold to Jerry Howard MMUG-A 5.00 (138.65) 04-05-84 Sold to Ed Spitzer 014, 015, & 016 @ $2 ea. 6.00 (132.65) -------- Reinburse DD for 50 disks see above for details 67.01 (199.66)   4 1 Cleaning Data, & Running Marginals (Survey Data II) 2 3 7 Cleaning Intermediate Calculations w/DROP TEMPORARY 1 4 13 CLIP AFTER, use to Create Columns of Text 2 4 3 CLIP BEFORE, use to Create Columns of Text 2 4 3 CLIP, use to Create Columns of Text 2 4 3 Collapses, Typologies & Recodes (Survey Data II) 2 3 7 Columns of Text, Creating 2 4 3 Columns, Using T/Maker to Create (Text files) 2 4 3 Comma, Use to Suppress Values For a Row in Printing 1 2 2 Comparison of Two Sample Means 1 1 26 Compatible Terminal List for T/Maker III 2 5 17 Compatible Terminal List for T/Maker III (Update) 2 6 2 Complement other Software with T/Maker 2 4 7 Consolidated Statment of Earnings for a Fin. Statment 1 2 10 Contests for the User, T/Maker ; ; CRCK.ASM version 4.2B ; by Keith Petersen, W8SDZ ; (REVISED 4/27/ BY BRK) ; ;----> NOTE: MUST BE ASSEMBLED BY MAC <---- ; ;CRCK is a program to read any CP/M file and print ;a CYCLIC-REDUNDANCY-CHECK number based on the ;CCITT standard polynominal: ; X^16 + X^15 + X^13 + X^7 + X^4 + X^2 + X + 1 ; ;Useful for checking accuracy of file transfers. ;More accurate than a simple checksum. ; ;Optionally will write an output file to the default ;drive, listing the CRC's of all files checked in a ;single session. ; ;COMMANDS: CRCK [drive:] [F] ; ;Examples: ; CRCK MYFILE.ASM ;CHECK ONLY MYFILE.ASM ; CRCK *.ASM ;CHECK ALL .ASM FILES ; CRCK *.* F ;CHECK ALL FILES, MAKE FILE OF RESULTS ; ;Program updates/fixes (these are written in reverse ;order to minimize reading time to find latest update): ; ;4/27/81 ADDED SUM OF CRC PRINTOUT AT END OF EXECUTION (BRK) ; ;10/06/80 FIX TO ERASE TEMPORARY FILE WHEN OUTPUT FILE IS ; REQUESTED AND NAME NOT FOUND IN DIRE CTORY. (KBP) ; ;10/05/80 FIX ABORT ROUTINE TO CHECK FOR FILE REQUEST ; AND TO CLOSE INCOMPLETE FILE BEFORE ERASING ; IT. ADDED TESTS FOR NO FILE NAME AND FILE ; READ ERROR. (KBP) ; ;10/04/80 ADD ROUTINE TO GIVE OPTION TO MAKE ; DISK FILE OF CRC's. FIXED MFA ROUTINE ; SO FIRST-TIME FLAG NOW SHOWS IF NO FILE ; FOUND. (KBP) ; ;04/21/80 ADD MULTIPLE FILENAME FEATURE, PRINT ; NAME OF CURRENT FILE BEING READ, AND ; ALLOW OPERATOR ABORT. (KBP) ; ;08/20/79 FIX BUG IN READIT ROUTINE WHICH ; SHOWED UP ONLY ON ALTCPM OPTION. (KBP) ; ;08/19/79 ADD CONDITIONAL ASSEMBLY FOR CP/M ; ON H8 OR TRS-80. (KBP) ; ;06/27/79 FIRST WRITTEN BY KEITH PETERSEN, W8SDZ ; ;Define true and false ; FALSE EQU 0 TRUE EQU NOT FALSE ; ;Conditional assembly switches ; STDCPM EQU TRUE ;TRUE IS STANDARD CP/M ALTCPM EQU FALSE ;TRUE IS H8 OR TRS-80 NOSYS EQU FALSE ;TRUE IF SYS FILES NOT WANTED ; ;System equates ; BASE SET 0 IF ALTCPM BASE SET 4200H ENDIF ;ALTCPM ; ;Define write buffer size (presently set for 8k) ; BSIZE EQU 8*1024 ;DISK WRITE BUFFER SIZE ; ;BDOS equates ; RDCON EQU 1 WRCON EQU 2 PRINT EQU 9 CSTAT EQU 11 OPEN EQU 15 SRCHF EQU 17 SRCHN EQU 18 READ EQU 20 STDMA EQU 26 BDOS EQU BASE+5 FCB EQU BASE+5CH FCBEXT EQU FCB+12 FCBRNO EQU FCB+32 FCB2 EQU BASE+6CH ; ;Program starts here ; ORG BASE+100H ; MACLIB SEQIO ;DEFINE MACRO LIBRARY USED ; CRCK: JMP BEGIN ;JUMP AROUND IDENTIFICATION DB 'CRCK.COM 4.2B 4/27/81' ; BEGIN: LXI H,0 ;GET STACK... SHLD SUM ; INIT CRC SUM COUNTER DAD SP ;POINTER SO WE CAN... SHLD STACK ;SAVE IT LXI SP,STACK ;INITIALIZE LOCAL STACK CALL CRLF ;TURN UP A NEW LINE LDA FCB+1 CPI ' ' ;SEE IF NAME THERE JNZ BEGIN2 ;YES, CONTINUE CALL ERXIT ;PRINT MSG, THEN EXIT DB '++NO FILE NAME SPECIFIED++',CR,LF,'$' ; BEGIN2: CALL ILPRT ;PRINT: DB 'CRCK ver 4.2B',CR,LF DB 'CTL-S pauses, CTL-C aborts',CR,LF,0 LDA FCB2+1 ;GET OPTION STA FFLAG ;SAVE IT FOR LATER CPI 'F' ;FILE WANTED? JNZ AGAIN ;NO, SKIP FILE INIT ; ;'Declare' FCB for output file ;(temporarily named CRCKLIST.$$$) ; FILE OUTFILE,CRCFILE,,CRCKLIST,$$$,BSIZE ; AGAIN: LXI SP,STACK ;RE-INIT STACK POINTER CALL MFNAME ;SEARCH FOR NAMES JNC NAMTST ;ANOTHER FOUND, PRINT NAME LDA MFFLG1 ;NOTHING FOUND, CHECK... ORA A ;... FIRST TIME FLAG JZ DONE ;AT LEAST ONE WAS FOUND CALL ABEXIT ;PRINT MSG, THEN EXIT DB '++FILE NOT FOUND++$' ; DONE: CALL ILPRT ;PRINT "SUM OF CRC:" DB CR,LF,' ---------------------> SUM OF CRCS = ',0 LDA SUM+1 ; GET MSB CALL HEXO MVI A,' ' CALL TYPE LDA SUM ; GET LSB CALL HEXO CALL CRLF LDA FFLAG ;SEE IF WE'RE MAKING FILE CPI 'F' JNZ DONE2 ;NO, SKIP THE FILE STUFF ; ;Close CRCKLIST.$$$ FINIS CRCFILE ; ;Build FCB for final name of CRCKLIST.CRC FILE SETFILE,FINAL,,CRCKLIST,CRC ; ;Erase any existing old file ERASE FINAL ; ;Rename CRCKLIST.$$$ to CRCKLIST.CRC RENAME FINAL,CRCFILE ; ;Now exit to CP/M DONE2: CALL MSGEXIT ;PRINT DONE, THEN EXIT DB CR,LF,'DONE$' ; ;Test for names to ignore ; NAMTST: IF NOSYS LDA FCB+10 ;GET SYS ATTRIBUTE ANI 80H ;IS IT SYS? JNZ AGAIN ;YES, IGNORE THIS FILE ENDIF ;NOSYS ; ;Ignore files with .$$$ filetype (they are usually ;zero-length and clutter up our display. We also ;want to ignore our own CRCKLIST.$$$ temporary file). ; LXI H,FCB+9 ;POINT TO FILETYPE IN FCB CALL TSTBAD ;CHECK FOR .$$$ FILES JZ AGAIN ;IF ZERO FLAG, IGNORE THEM ; ;Move 8 characters from FCB+1 to FNAME LXI H,FCB+1 LXI D,FNAME LXI B,8 CALL MOVER ;Move 3 characters from FCB+9 to FNAME+9 LXI H,FCB+9 LXI D,FNAME+9 LXI B,3 CALL MOVER ;Now print filename.type CALL ILPRT ;PRINT: DB CR,LF,'--> FILE: ' FNAME: DB 'XXXXXXXX.XXX',TAB,TAB,'CRC = ',0 ; ;Open the file LXI D,FCB MVI C,OPEN CALL BDOS INR A JNZ RDINIT CALL ABEXIT DB '++OPEN FAILED++$' ; ;Initialize CRC to zero and set BUFAD to cause initial read RDINIT: LXI H,0 SHLD REM ;INIT REMAINDER TO ZERO LXI H,BASE+100H SHLD BUFAD ;INIT BUFFER ADRS ; ;This is the read loop READIT: LHLD BUFAD MOV A,H ;TIME TO READ? CPI BASE SHR 8 JZ NORD ;NO READ MVI C,CSTAT CALL BDOS ;CHECK FOR OPERATOR ABORT ORA A JZ READ2 ;NOTHING FROM OPERATOR MVI C,RDCON CALL BDOS ;GET CHARACTER INPUTTED CPI 'C'-40H ;CONTROL C? JZ ABEXT2 ;YES EXIT ; READ2: LXI D,FCB MVI C,READ ;READ ANOTHER SECTOR OF FILE CALL BDOS ORA A ;CHECK RETURN CODE JNZ FINISH ;ERROR OR EOF LXI H,BASE+80H ;BUFFER LOCATION ; NORD: MOV A,M ;GET FILE CHARACTER STA MESS ;SAVE FOR DIVP INX H SHLD BUFAD ;UPDATE BUFFER ADR CALL DIVP ;CALCULATE NEW CRC JMP READIT ;GO READ MORE CHARACTERS ; FINISH: CPI 1 ;NORMAL END-OF-FILE? JNZ FILERR ;NO, IT WAS A READ ERROR LDA REM+1 ;GET MSP OF CRC CALL HEXO ;PRINT IT MVI A,' ' CALL TYPE ;TYPE A SPACE LDA REM ;GET LSP OF CRC CALL HEXO ;PRINT IT CALL CRLF ;TURN UP NEW LINE LHLD REM ; GET PRESENT CRC XCHG LHLD SUM ; GET RUNNING SUM DAD D ; ADD THEM SHLD SUM ; SAVE BACK IN BUFFER JMP AGAIN ;SEE IF MORE FILES TO DO ; FILERR: CAL L ABEXIT ;ABORT BECAUSE OF FILE READ ERROR DB '++FILE READ ERROR++$' ; ;--------------------------------------------- ;An 8080 routine for generating a CYCLIC- ;REDUNDANCY-CHECK. Character leaves that ;character in location REM. By Fred Gutman. ;From 'EDN' magazine, June 5, 1979 issue, page 84. ; DIVP: LHLD REM ;GET REMAINDER MOV A,H ANI 128 ;Q-BIT MASK PUSH PSW ;SAVE STATUS DAD H ;2 X R(X) LDA MESS ;MESSAGE BIT IN LSB ADD L MOV L,A POP PSW JZ QB2 ;IF Q-BIT IS ZERO ; QB: MOV A,H XRI 0A0H ;MS HALF OF GEN. POLY MOV H,A MOV A,L XRI 97H ;LS HALF OF GEN. POLY MOV L,A ; QB2: SHLD REM RET ;-------------------------------------------- ; ;Hex output ; HEXO: PUSH PSW ;SAVE FOR RIGHT DIGIT RAR ;RIGHT.. RAR ;..JUSTIFY.. RAR ;..LEFT.. RAR ;..DIGIT.. CALL NIBBL ;PRINT LEFT DIGIT POP PSW ;RESTORE RIGHT ; NIBBL: ANI 0FH ;ISOLATE DIGIT CPI 10 ;IS IS <10? JC ISNUM ;YES, NOT ALPHA ADI 7 ;ADD ALPHA BIAS ; ISNUM: ADI '0' ;MAKE PRINTABLE JMP TYPE ;PRINT IT, THEN RETURN ; ;Inline print routine ; ILPRT: XTHL ;SAVE HL, GET MSG ; ILPLP: MOV A,M ;GET CHAR CALL TYPE ;OUTPUT IT INX H ;POINT TO NEXT MOV A,M ;TEST ORA A ;..FOR END JNZ ILPLP XTHL ;RESTORE HL, RET ADDR RET ;RET PAST MSG ; ;Send carriage return, line feed to output ; CRLF: MVI A,CR ;CARRIAGE RETURN CALL TYPE MVI A,LF ;LINE FEED, FALL INTO 'TYPE' ; ;Send character in A register to output ; TYPE: PUSH B PUSH D PUSH H ANI 7FH ;STRIP PARITY BIT MOV E,A PUSH D CALL WRFILE ;WRITE TO FILE IF REQUESTED POP D MVI C,WRCON ;SEND CHARACTER TO CONSOLE CALL BDOS POP H POP D POP B RET ; ;Write character in E register to output file ; WRFILE: LDA FFLAG ;GET FILE TRIGGER CPI 'F' ;IS IT SET? RNZ ;NO, RETURN MOV A,E ;GET CHARACTER BACK PUT CRCFILE ;SEND IT TO THE FILE RET ; ;Multi-file access subroutine. Allows processing ;of multiple files (i.e. *.ASM) from disk. This ;routine builds the proper name in the FCB each ;time it is called. Carry is set if no more names ;can be found. The routine is commented in Pseudo ;code, each Pseudo code statement is in <<...>> ; MFNAME: ;<> MVI C,STDMA LXI D,BASE+80H CALL BDOS XRA A STA FCBEXT STA FCBRNO ;<> LDA MFFLG1 ORA A JZ MFN01 ;<> ;Save orig request LXI H,FCB LXI D,MFREQ LXI B,12 CALL MOVER LDA FCB STA MFCUR ;SAVE DISK IN CURR FCB ;<> LXI H,MFREQ LXI D,FCB LXI B,12 CALL MOVER MVI C,SRCHF LXI D,FCB CALL BDOS ;<> JMP MFN02 ; MFN01: ;<> LXI H,MFCUR LXI D,FCB LXI B,12 CALL MOVER MVI C,SRCHF LXI D,FCB CALL BDOS ;<> LXI H,MFREQ LXI D,FCB LXI B,12 CALL MOVER MVI C,SRCHN LXI D,FCB CALL BDOS ;<> MFN02: ;<> INR A STC RZ ;<> DCR A ANI 3 ADD A ADD A ADD A ADD A ADD A ADI 81H MOV L,A MVI H,BASE SHR 8 PUSH H ;SAVE NAME POINTER LXI D,MFCUR+1 LXI B,11 CALL MOVER ;<> POP H LXI D,FCB+1 LXI B,11 CALL MOVER ;<> XRA A STA FCBEXT STA FCBRNO STA MFFLG1 ;TURN OFF 1ST TIME SW ;<> RET ;------------------------------------------------ ; ;Check for .$$$ files ; TSTBAD: CALL TESTIT ;CHECK FIRST ONE FOR '$' RNZ ;NO, RETURN CALL TESTIT ;CHECK SECOND ONE RNZ ;NO, RETURN ;FALL INTO TESTIT TO CHECK THIRD ; TESTIT: MOV A,M ANI 7FH ;STRIP ATTRIBUTE CPI '$' ;CHECK FOR $ FILETYPE INX H RET ; ;Move (BC) bytes from (HL) to (DE) ; MOVER: MOV A,M STAX D INX H INX D DCX B MOV A,B ORA C JNZ MOVER RET ; ;Aborted - print reason. If making output file, ;close the incomplete file to update CP/M's bit map, ;then erase it. ; ABEXIT: POP D ;GET MSG ADRS MVI C,PRINT CALL BDOS ;PRINT MSG ; ABEXT2: LDA FFLAG ;SEE IF WE ARE MAKING FILE CPI 'F' JNZ ABEXT3 ;NO FILE, SKIP FILE STUFF FINIS CRCFILE ;CLOSE INCOMPLETE FILE ERASE CRCFILE ;ERASE INCOMPLETE FILE ; ABEXT3: CALL ERXIT ;PRINT MSG, EXIT DB CR,LF,CR,LF,'++ABORTED++$' ; ;Exit with message ; MSGEXIT:EQU $ ;EXIT W/"INFORMATIONAL" MSG ERXIT: POP D ;GET MSG MVI C,PRINT CALL BDOS ; ;Exit, restoring stack and return to CCP ; EXIT: LHLD STACK SPHL RET ;TO CCP ; ;Program storage area ; SUM: DW 0 ;BUFFER FOR SUM OF CRC'S FFLAG: DB 0 ;FILE WRITE REQUEST FLAG REM: DW 0 ;CRC REMAINDER STORAGE MESS: DB 0 ;CRC MESSAGE CHAR GOES HERE MFFLG1: DB 1 ;1ST TIME SWITCH MFREQ: DS 12 ;REQUESTED NAME MFCUR: DS 12 ;CURRENT NAME BUFAD: DS 2 ;READ BUFFER ADDRESS DS 60 ;STACK AREA STACK: EQU $ OLDSTK: DS 2 ;OLD STACK POINTER SAVED HERE ; ;Define location of file write buffer BUFFERS:EQU $ ; END CRCK O 6 .:;=,/[]<>a{3 _à  F F : i`N#Fogo&og_{_z#W  1 Portfolio Appraisal, Security How to Generate 1 3 2 Portfolio Appraisal, Stock How to Generate 1 3 2 Positive & Negative Percent Change Calculations 1 4 13 PRINT NONSTOP, use 2 5 11 Printing Many Documents 2 5 11 Printing the Labels (from mailing list) 2 6 6 Printing, Suppressing Particular Values For a Row 1 2 2 Product Information on T/Maker 2 5 2 Profitability Ratios for a Financial Statement 1 2 10 Program for Payroll with T/Maker 2 4 4 Programmers, T/Maker Applications (List) 2 5 2 Programs, Other and T/Maker 2 4 7 Projecting Costs for Software (projecting budget) 1 5 11 Purchase, Using T/Maker's NPV 1 2 5 RAM usage to speed up T/Maker (Hyperion PC) I th even tha yo inadvertentl hav erase fil an hav no wriite ove it th fil ma b recovere b usin th DU.CO program Th procedure(wit nomina explanator note i describe below. Th firs thin yo mus d i t fin th erase fil i th directory Ther ar tw thing t loo for E an e Whe yo ge th D promp inpu G0;Di carriag return. :G0;D A limited output of the screen appears below. 40 00534944 20202020 20434F4D 0000003A *.SID COM...:* 50 33343536 3738393A 00000000 00000000 *3456789:........* FIRST LINE - 40 00534944 20202020 20434F4D 0000003A *.SID COM...:* || ||| | || || | | || ||^---hex file name/type--^ || || ^file name^ || || || || in ASCII || || extent-^^ || || || || || || file size in sectors-^^ || || || ^^-00 = file active other values (E.G 03) = user # || E5 = file erased ^^-displacement of line in directory sector SECOND LINE - 50 33343536 3738393A 00000000 00000000 *3456789:........* | | | | | ^- allocation groups ^-----allocation group numbers-----^ just happened to be printable I th entr yo ar lookin for(remembe i shoul hav a E prefi o th he sid an a prefi o th asci side)mak not o th trac numbe an secto number I i i no liste on the screen then input the following: +;D;Z20;/31 Th res o th director wil no scrol b o you screen Whe yo fin you erase fil mak not o th trac an secto number Yo ca sto th displa a an tim wit control C. Now input: Tx;Sy;D Th E shoul no b replace wit 0 an th o the ascii side should be gone. If correct, input W;X2>2>22!"!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77!a{   `OE!y6$ -7rBo&))T])))!yV5:=b#:=#:$=2#v+:<"(">6͋5:&=͋5#*&=|"M1Ϳ5#>6͋5:&=͋5>#͋5>6͋5:'=͋5#*&="<(#>͋5:&=͋5>s͋5>@2=#R1Ϳ5#(,#:==2=)(@#>s͋5#͘(Y#X1:>͋5:&=͋5c1Ϳ5#f1Ϳ52=#(—#>͋5:&=͋5>{͋5c1Ϳ5#(#:$=µ#>}͋5c1Ú#:$=;-͘(#>&͋5͋5f2Ú#:$=$v+è":=$,v+2#:$=>$$>͋5v+>͋5>@2$=2#*="<1Ϳ5:=2="<|s$}d$[2Ϳ5z$g$[3Ϳ5>G>)͋5$#͞*D)͏,Ͷ,v++4ʱ$êG0ñ!9DM*Ow#w͐ ! ~#fo##~#fon&͡|ͤ! ~#fo##~#fon&*Os#rͧ7 47!:!R!!Usage: aliens is the level of difficulty from 0 to 9 level 0 is the easiest and is the default 77Ì ÊÑ5Ø "Æ&!ʹͷͺͽ\1++++| \1++| \E|, \G|, / = õ'!9DM`iw#w! ~#fo͐n}ʃ ! ~#fo͐n&: `i^#Vr+sK !9á v00'7 c(Ê*-w#w*Gw#w*Mw#w! *Q͏ ! *͏ !3 *͏ ! *7͏ !s *b͒ !z *q͒ ! *͒ ! *͒ ! *͒ ! *͒ ! *͒ ! *͒ ! *͒ ͕ *͘ *1w#w͛ \1| ͞ ý *-w#w*/6#6*96#60,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,00,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,00,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,00,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0rookieearthlingspace cadetyeomanlieutenantcommandercaptainadmiralmaster assassin ++17 =,à7 !! \O!Q* * \-!\* * \1>H>ʇ>T>ʒ>`>ʝ>l>ʨ>x>ʳ>„>ʾ!i ! ! ! !! !O !F! \1\/!|* * *E67#6\O *7s#r\7\9F\9*7s#r\O*Is#r\I s*I6 #6\O*Ks#r*5w#w\5ڕ!\7\5? *3w#w\3 ڄ\3\5|g}o\5? ! \5 ?\3))*W\7\5?s#r\5 ?\3))*W##\3?s#r*3^#Vr+s*5^#Vr+sÕ*A66#6*;w#w*=w#w*?w#w*36#6*56H#6 '*56#6*7w#w*9w#w\1.M5M3 ! *3w#w\3\In\3))*=w#w*3^#Vr+s9*Cw#w*Gw#w*3w#w\3B!\3 *5w#w\5P1\3k*\5)\3k*Q\5)~#fos#rz! ! *5^#Vr+sù*3^#Vr+sÏ*iw#wLevel:%2d Score: %-5d B L O O D B A T H W E C O M E I N P E A C E ! T H E A L I E N S S T R I K E B A C K !I N V I S I B L E A L I E N W E A S E L S ! K L I N K E R T H E B L A C K H O L E ! Bases: %d ÖÓ---\1+|M5\OH*76#6M5*76#6͍|͐*aska&|g}o>z>>,>>c*>>/6>>xB> >.N> > Z>(>f>A>r>A>q~>A>Š>A>1–>G>2¢>b>3®>}>4º>ʘ>5>ʳ>6>\1+|*76#6\1+|* 76#6\1+|*7w#wM9|>*96#6͓\1|S*16#6\1|n*16#6\1|ʉ*16#6\1|ʤ*16#6\1|ʿ*16#6\1|*16#6+7 /=,!9DMM9>>.>>.>+>väM;!!bM;!!cM;!!dYM5###*;s#rM;!!eM;M9!gM;M9#!i*3w#w\37\3))*W~#foM9n\3))*W##~#fo#M;n\3))*W##~#fo###M;n\3\O\3 ?`is#r\1+|ʧ͐\M`is#r͐ڻ`i6#6*-~#fo͐s#rM;M9#!k\1!m\3))*W##~#fo\3))*W~#fo!*9w#w\3))*Ww#w*E^#Vr+sY*3^#Vr+s*3w#w\3\IRM9\3))*=~#foAM;\3))*=##~#foAM;M9!oM;M9#!q*9w#w*G^#Vr+s\3))*=w#wY*3^#Vr+sÊM9$M9$M9k*M;)~#fo|$M;M9\1++|!M9k*M;)w#w!sM9M;M9#!u*9w#wYMi|M9+|M;MgMi*3s#rM;\3\3!!w\3!!*iw#w*-~#foMes#rM;!!*9w#wY*9^#Vr+szVM;!!M;!!*-~#fo\O#s#rY!9||   Ú+=,M7|§*5~#foM7s#rM5*56#6*7w#w M5H *56H#6*7w#w\13M5M3͔!͗P+7 =,1/+07à7*Cw#w\C\Iz \G|w\C))*=~#fo|“i \C))*=^#Vr+s\C))*=~#foQ\C))*=##~#fo\C))*=~#fo+8!| ;\C))*=w#w\C))*=##~#foM5N\C))*=##~#foM5N\1҅M5M38!>*/^#Vr+s!F!8\/!~ *A*;*-~#fos#rD\/|G!JM5!8! ;*56H#6M2**56#6\1NM5!8!>i \C))*=~#foڴ\C))*=~#foҴ\C))*=~#fok*\C))*=##~#fo)~#fo|ʴ\C))*=##~#fo\C))*=~#fo+8! ;\C))*=##~#fo\C))*=~#fo8! ;\C))*=~#fok*\C))*=##~#fo)w#w\C))*=w#w*G^#Vr+si \C))*=##~#fo\C))*=~#fo+8! ;\C))*=~#fo0 *G^#Vr+s\C))*=w#wa \C))*=##~#fo\C))*=~#fo8! ;*C^#Vr+s\ Bases: %d *ç à7+17 !9DM`i6P#6Mi|/!͛ *3s#r!`,!\30!*i6#6*g6#6 !*i6#6͐*gs#r*e6Z#6!Mg!͞ \1j!Me!"*͡ *ͤ *e^#Vr+s*g~#foMis#rMg*3s#r͐!\3!MgMi!͞ ! "ͤ *iw#w!9 <=%d=> $"/+0+=,\A#*As#r!7ڗ"\E|J"*=w#w\;|ʌ"\?*?s#r*=6#6*;w#w*Aw#w\A))*W~#fo*3s#r!""%"\3"*-~#fos#r""\?|#\A))*W##^#Vr+s,#\A))*W##^#Vr+s\A))*W##~#fo*5s#rzʁ#\5\MK\O?ڍ#*;6#6\5\3"\=|#!!"\A))*W^#Vr+s*3s#r\5\3"\5\3|g}o\A?!"\A))*W~#fo$\A))*W~#fo$\A))*W##~#fo*5s#r*36#6\3$\5\3|$\A))*W~#fok*\A))*W##~#fo\3)w#w*3^#Vr+s{$\1+| %\1++| %\A*3s#r\3|]%\3))*W~#fo|E%*3~#fos#r!%\A))*W##~#foM5\Kڄ&\A))*W##~#foM5###\K҄&\A))*W~#foڄ&*3w#w\3\I҄&\3))*=~#fo|s&\3))*=\A))*W~#fos#r\3))*=##\A))*W##~#fo##s#r*G^#Vr+sÄ&*3^#Vr+s%Ø&++17 7͉&! ! ͌&\O&*&\Ok*b!['*͏&*͒&*O^#Vr+s!o'*͏&*͒&! ! ͌&\O!'*͏&*͒&!2͕&Congratulations %s - you have won at level %dNow let's see how good you are at level %dû'7!9DM͐!͸'*3w#w\3 a(\3*\3*ns\3*n}-(\3**s\3*n}P(\3*+s*3^#Vr+s'o(++7 f(!!i(!(l(!$)l(!Z)l(!)l(!)l(!)l(!*l(!>*l(!n*l(!*l(!*l(! +l(!H+l(!t+l(!+l(Attent ion: Alien invasion in progress! Type: <,> to move the laser base left as above, for lefties <.> to halt the laser base for lefties to move the laser base right for lefties to fire a laser beam <1> to play "Bloodbath" <2> to play "We come in peace" <3> to play "The Aliens strike back" <4> to play "Invisible Alien Weasels" <5> to play "Klinker" <6> to play "The Black Hole" to quit +7 *++7 !9DMw*&*͐w(ѯgsw+&*͐w)ѯgs*+C,7 !9DM\1w,͐|w,͐w,! 6#6͐>‡,>,>“,>,>Ÿ,>->«,> ->·,>->,>!->,>,->,>7->,>B-]-!_-@,]-!e-@,]-!k-@,]-!q-@,]-!w-@,]-!}-@,]-!-@,]-!-@,]-\1R-]-!-@,]- OXO XOX \o/ /o\ "M" wMw xx|xx #Ù-7!͖-|ʾ-!͖-*,s!!w,&-+=,7 747!9DM\1ں.\1`is#r*16#6*3w#w\3ڪ.!\3-*5w#w\5Pҙ.\3k*\5)~#fo+|€.!-È.!/-*5^#Vr+sB.*3^#Vr+s.͐*1s#r\1ھ/\1`is#r*16#6*3w#w\37Ҧ/\3))*W~#fo|ʕ/\3))*W##~#fo\3))*W~#fo-\3))*W##~#fo\3))*W~#fo|g}o\3?-*3^#Vr+s.͐*1s#r!2-!!-* --!9 /+17 !!/\-!&0*/*/%d 40+ñ!!.010!9DM! n&0ͯr0! n&9ͯ|0'1!9DM! y0`is#r!ʷ0! ^#Vr+s͐s#rÄ0!9!9DM͐`is#r! ^#Vr+s! ^#Vr+sns{00͐0!91Ñ1!9DM! ͐ 1-15!9DM͐~#fon}I1!È1͐~#fo*1`is#r͐~#fon}ʁ1͐^#Vr+sn},ʁ1\1͐È1!9à15G0j66!h9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{4`in}%4! ! s#r! 6#6! s! s! s͐n}-02! ^#Vr+s! 4͐n}0@2! 4͐n&͗1}]2! ͚1`2!! s#r! ^#Vr+sn`is{.¨2! ͚1! s#r! 4! ^#Vr+sn`is`in&͝1}D2U3X3O"3Ch3Sʙ34͐~#fo|3! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 (3! 6(3! 6! ~#fo! n&! ^#Vr+s~#fo! ͔1ѯgs#r4! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+s4! n}¬3! 6#6! ^#Vr+s~#fo! s#r͐n}4͐|4! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s3͐6! ! s#r! n}h4! ^#Vr+s!h4! ^#Vr+s! n}_4!0b4! s-4͐! ^#Vr+sns{ʑ4! ^#Vr+sh4! n}4! ^#Vr+s!4! ^#Vr+s6 Û44! ^#Vr+s`ins4! ^#Vr+s`ins1͐6!95G0!9DM`iw#w! 6#6͐ n! s{ 95! n} G5! ^#Vr+s5! n}-f5! 6#6! ^#Vr+s! ^#Vr+sn! s5|ʧ5͐ ?! nѯg`is#rf5͐͐?÷5!955!9DM͐͐ 6͐^#Vr+s͐ 6͐0 6͐7s!&a6͐ ͐͐ ͉͐5`is͐ ͐͐ )͐5`in&#&a6!9p6G0!9DM`iw#w͐~#fon&m6}ʽ6͐ ?͐^#Vr+snѯg`is#r~6͐6!967!9DM! n&6|6! n&6! n&!9DM! n&aͯ07! n&zͯ  |F7""|7 ! ###R7""  Wait a few seconds, and type a CR: $*>Hʮ777*|g}o"zg{o"|g #+|7'z7 777*+++:G_*DM!8o&=y5x5   Ú+=,M7|§*5~#foM7s#rM5*56#6*7w#w M5H * Documentation for LU.COM and LRUN.COM | This document applies to version 3.00 of LU.COM and version 2.0 of LRUN.COM. Copyright (c) 1982, 1983 by Gary P. Novosielski All rights reserved. Permission is hereby granted to copy and distribute this document for any non-commercial purpose. Any use of this material for commercial advantage without prior written consent of the author is prohibited. INTRODUCTION Library Utility (LU) is a program to allow combining of multilple files into one larger file. It requires CP/M version 2.0 or higher to run. | Version 3.00 replaces version 2.11. The major revisions are | the addition of the -b, and -n operators, and the addition | of CRC calculation and checking to improve reliability. | Error reporting has also been improved. Major revisions are | marked with a vertical bar (|) in the left margin. The directory informati on in an LU style library is contained in the same file as the data files, or members. The amount of space to be allocated to the directory must be specified by the user when a new library is created, but can be changed when the file is reorganized. The size of each directory entry is 32 bytes, which means each four directory entries take up one sector of the library file. Currently | only 18 bytes of each entry are used, with 14 bytes being reserved for use with possible future enhancements. The directory itself uses one entry for control information, so the number of directory sectors needed for a library of m members is (m + 1) / 4, rounded up to the next whole number. The user need not be concerned with this discussion, as directory size is calculated by the program. All directory sizes are input and output in terms of entries, each entry being a potential member file. The program adjusts directory size to an integral number of sectors. LRUN.COM is a small program which allows running a .COM (object code) file member directly from any library, without having to extract it to a separate disk file. Page 1 of 14 83-08-16 Documentation for LU.COM and LRUN.COM WHY USE LIBRARIES? First, a library file usually takes up less space than the total of the individual member files which went into it. The reason for this is that CP/M allocates disk space in fixed blocks or groups, typically 2k bytes each. Any space after the last sector of a file up to the next 2k block boundary is wasted. The same files in a library use only the number of sectors they actually need, and though the library itself may have a partially wasted block at the end, and requires some space for directory information at the beginning, the net effect is usually a saving of total space. The best results are seen when many small files are combined into one library. Second, a library file makes most efficient use of the CP/M disk directory, since it is treated as only one file by CP/M regardless of how many members it contains. Third, libraries can aid in transferring packages of software from one system to another using XMODEM. Only one file is transferred, eliminating the need to run the XMODEM transfer program several times, the chance of overlooking a needed file, and the problems of naming conflicts, (such as READ.ME files) among unrelated packages. WHY NOT USE LIBRARIES? There are some very good reasons for not using libraries. For one thing, files within a library are not available to most "normal" programs. If a frequently accessed file is placed in a library, it will have to be extracted from the library to its free-standing counterpart before it can be used by most programs. (.COM files are a notable exception to this, because of the availability of the LRUN command, covered later.) Libraries can actually waste disk space. When a disk file is erased, CP/M returns the space formerly used by the file to the free space pool for use by new files. When a member file is deleted from a library however, the space previously occupied by the file is not useable. The library must be reorganized to make this space available to CP/M. While this is easy to do with the LU program, it is not automatic, and if the situation is ignored, large areas of disk can be tied up as unproductive "dead space". Page 2 of 14 83-08-16 Documentation for LU.COM and LRUN.COM HOW TO USE THE LIBRARY UTILITY LU has two main methods of operation: interactive, and parameter driven. In parameter driven mode, the program takes its command inputs from the command line when it is first invoked, and when the entire line has been processed, execution ends. In interactive mode, the program takes its command inputs from one or more input lines from the standard input device (typically the console). When all the command inputs have been processed, the program reads another line. This process can be repeated as long as necessary. Input from disk files, C program "pipes", and the XSUB facility are also supported for more advanced applications. Interactive mode is probably the best way to get to know the program, because the effect of each action can be immediatley seen. To start an interactive library maintenance session, just type LU on the command line with no parameters after it. All the methods make use of similar syntax: Each input line, regardless of i ts source, is scanned left to right. All alphabetic characters are converted to upper case. If the line contains any blanks it is separated into multiple individual input strings. These input strings are divided into two classes: operators (sometimes called tags, or options) and operands. An operator is defined as any two character string where the first character is a minus sign. Operators tell the program what to do. Valid operators are -a, -b, -c, -d, -e, -l -n, -o, -r, -u and -x. Anything else with the same form is an operator too, but an invalid one. Operands are any other input string. | The most common operand strings are names of files | which are to be acted upon by the previous operator, for | instance, added to or extracted from a library file. These | are called filespec operands, and have the following general | form: [u/][d:][filename][.[ext]] where u is an optional user area prefix. It is a decimal number from 0 to 31, and if present, must be followed by a slash (/) character. User areas greater than 15 should be used with care, as they cannot be accessed by any of the resident CCP (Console Command Processor) commands of CP/M, such as USER, TYPE or ERA. d is an optional drive designator. It is a single character in the range of A to P, and if present, must be followed by a colon (:). filename is a string of 0 to 8 characters, following the standard CP/M conventions for filenames ext is a string of 0 to 3 characters, Page 3 of 14 83-08-16 Documentation for LU.COM and LRUN.COM following the standard CP/M naming conventions for filetype extensions. The period (.) after filename is manditory if ext is specified, and optional otherwise. The names "xyz" and "xyz." are equivalent. Ambiguous operands are those which contain the characters "*" or "?" in the filename or extension fields. Examples of | valid filespec operands are: foo.bar 3/b:test.fil 3/test.fil b:test.* test.fil test. test z -z. comm?nd 0/ b: 5/a: Note in the example "-z." the period, though not required by the syntax of a filename, is essential to prevent the operand from being mistaken as the invalid operator "-z". What action is taken upon the operand depends upon which operator most recently preceded it. If no operator was entered, or an invalid one, or one that expects no operands, the operand will draw an error message, but will otherwise be ignored. When running interactively, LU prompts for the operators and operands. You can type as many inputs as will fit on the line, separating them with spaces. The end of an input line has no special significance. The most recent operator remains in effect, and the next line can begin with additional operands for it. The prompt displayed for each input line has this form: -m u/d:> where m is the current operator in effect u is the current user number in effect d is the current default drive For example the prompt might be "-E 0/A:>". This indicates that the -e operator is in still in effect; if an operand is entered it will be interpreted as the name of a member file to be Extracted from the library. It also shows that the current user number is 0, and the current drive is A:. Any operands which are entered without an explicit user or drive will use these defaults. The defaults can be changed at any time with the -u operator, discussed below. Page 4 of 14 83-08-16 Documentation for LU.COM and LRUN.COM When the program first starts up, the prompt begins with "-?", which means no operator is currently in effect. In this case, the only valid input is an operator. Any operand will be rejected. Page 5 of 14 83-08-16 Documentation for LU.COM and LRUN.COM SUMMARY OF OPERATORS In this discussion, the "open library" refers to the library name specified as the current library by using the -o operator discussed below. The default name LIBRARY.LBR is used whenever an operator needs an open library, but none is currently open. -a add files to library. -a causes subsequent operands to be treated as the names of files to be added to the open library. Ambiguous operands match all disk files which qualify accordin g to normal CP/M wild-card conventions, except those with a filetype of .LBR. Explicit user or drive specification on an operand causes that area to be searched for the file(s) instead of the defaults. | -b Buffer size set. -b reads the subsequent operator | as the size (in sectors) to allocate for a disk I/O buffer. | Normally, this operator need never be used, since a 64 | sector buffer is assumed if not specified. A full discussion | of buffer size considerations, and their relation to disk | access speed is beyond the scope of this document. | Generally, a larger buffer will increase the speed of | adding, extracting and reorganizing, but this widely | variable with different hardware. | Bear in mind that a large I/O buffer will decrease the | size of the largest library directory which can be processed | by the program, since the directory buffer competes for | system memory with the I/O buffer. Conversely, setting the | buffer to a value less than 64 will increase the maximum | directory size. This operator can only be used at program | startup, before the first library is open. Its operands are | not filespec operands, but simple integer numbers in the | range 1...255. -c close the open library. If a library has been opened with the -o operator, or if the default library LIBRARY.LBR has been opened by some other operator, -c causes it to be closed. Otherwise, it has no effect. Normally this operator need never be entered, since any open library is automatically closed at the end of the session or when another one is opened. It is provided for situations where it is desired to change disk volumes without ending the LU program. Before removing the disk containing the library file, it must be closed. After mounting a new volume, the -U operator (see below) should be used. The -c operator expects no operands. -d delete files from library. -d causes subsequent operands to be treated as the names of members to be deleted from the open library. Ambiguous names match all members which qualify. User and drive specifications on operands are ignored, since the library members are obviously in whichever area contains the open library. -e extract files from library. -e causes subsequent operands to be treated as the names of members in the open Page 6 of 14 83-08-16 Documentation for LU.COM and LRUN.COM library to be extracted to normal free-standing CP/M files. The original copy is not deleted, and remains in the library. Ambiguous operands extract all members which qualify. User or drive specifications on member names cause the output file(s) to be placed in the specified area rather than the default. Any existing file with the same name will be overwritten unless it is protected by having its Read/Only attribute set on. -l list current library map. -l causes the directory of the open library to be listed on the console. The member names are displayed, along with their index (starting record within the library) their size in sectors, and the | internally calculated CRC value. Also, information is displayed about the number of sectors in the library, and how much space is used and unused (wasted). The number of active entries (members) in the directory is also displayed, as well the number deleted, free for future use, and the total number. This helps determine whether the library needs to be re-organized to free unused space and deleted entries. The operator -l expects no operands, so the next input should be another operator. | -n Name a member. -n causes each subsequent operand | to be treated as a request to change the name of a member in | the open library. Since both the new and old names of the | member must be given, a special double operand format is | used. It is essentially two filespec operands "glued | together" with an equals sign. For example: | newname.typ=oldname.typ | would cause the member OLDNAME.TYP to have its name changed | to NEWNAME.TYP. If the old name is not found in the open | library, or if the new name is that of an existing member, | no rename takes place, and an appropriate message is | displayed. Operands which do not conform to the special | = syntax will also draw an error message. -o open a library. -o causes the following operand to be treated as the name of a library file to be opened for use with subsequent operators. If there is already an open library, it is first closed, and the new one opened. If the new library does not exist, it is created with no members. Ambiguous names are not allowed. User and drive specification can be used to override the current area. The file type may be specified, but if not entered, defaults to .LBR which is strongly suggested as the file type for all library files. You will recall that files of type .LBR are ignored by the wildcard matching of the -a (add) operator. This prevents libraries from being accidentally added to other libraries, or to themselves; a situation not unlike trying to drive a truck up its own Page 7 of 14 83-08-16 Documentation for LU.COM and LRUN.COM tailpipe. If for some reason you want to add one library to another, be my guest, but you will have to specify the name without * or ? characters when adding it. -r reorganize library. -r causes the currently open library to be reorganized. First, the directory is sorted  into alphabetical order, and then all active members are copied to a work library which is opened on the default user/drive. The size of the directory may be changed at this point by specifying a greater or smaller number of entries than were present the old library. The directory will always be made large enough to contain all the active members of the old library, so it is safe to enter a size of "1" to make the directory as small as possible. (See Specifying Directory Sizes below.) When reorganization is complete, the old library is deleted from its user/drive area, and the work library in the default area is renamed to the name of the old library. No backup copy is retained. The newly reorganized library remains open for use with subsequent operations. | Note that although the newly reorganized library always | ends up in the default area, the default area can be changed | with the -u operator. (Do this first, before using -o.) | Also, the old library can be opened in any area, by using | explicit user/drive specifications. The net result is that | it is possible to reorganize a library from any desired area | to any other area. Reorganizing a library to a different | drive is usually a much faster operation, and is manditory | if the current disk does not contain enough free space for | the old and work libraries at the same time. -u Use new default area. The -u can be used to change the default value for user number or drive. It causes the user prefix and drive spec of the following operand to be used as the new default area. If the following operand has no user prefix, or no drive spec, the corresponding default is not changed. (The filename and ext sections of the operand must be absent.) If a change is made, any open library is first closed, and the disk system is reset. Thus feature allows newly mounted disk volumes to be accessed for writing; CP/M causes new volumes to be Read Only until the program performs a disk system reset. The -u operator also affects which area will be used for the work library during reorganization. See the -r operator above. Note: If directed I/O is active (See advanced features below) the -u operator is treated as invalid. Due to some unfortunate assumptions in the C run-time package, the default drive cannot be safely changed while directed I/O files are open, and the BDOS gets confused by the disk reset under these conditions. -x eXit program. -x causes the interactive mode to be turned off, which means that the input line containing it will be the last line scanned by the program. It does not Page 8 of 14 83-08-16 Documentation for LU.COM and LRUN.COM cause immediate program termination, and if any more operators follow it on the same line, they will be processed normally. The program terminates only after the current line is fully processed. Any open library is then closed, and the user number and default drive are reset to the values they had when the program was originally invoked. To preserve compatability with earlier versions, the program will also end if an empty input line (carriage return alone) is typed. SPECIFYING DIRECTORY SIZE Whenever an old library is opened, the directory size is displayed as follows: Old library LIBRARY.LBR has 32 entries, 5 free. This means that 5 more members may be added before the directory becomes full. When the directory is full, -a becomes an invalid operator, and the library must be reorganized to add any more members. When a library is created for the first time, the user is prompted like this: New library COMMAND.LBR. Allow how many entries?_ Any number from 1 to 65535 is valid. The actual maximum is determined by the amount of free memory available on the system in use. Directory size will be rounded up to the next whole sector necessary to contain the number of entries requested. This number will remain in effect until the library is reorganized. Since the directory itself counts as an entry, one entry is added to your response before the size is calculated. Therefore just enter the maximum number of member files you want the library to be capable of holding. The maximum number of member files is also constrained by the amount of available disk space. If the disk space runs out during an add, the name is not added to the directory. If a multiple add is in progress, due to an ambiguous operand, the remaining qualifying files are still added if possible. If any of them is small enough to fit in the remaining disk space, it will be added. If any sectors were written by a failed add attempt, and then never utilized, they remain as unused sectors, and the library should be reorganized. PARAMETER DRIVEN METHOD All of the information needed for a maintenance run may be specified on the command line. The operators and operands are entered, separated by spaces, after the LU command, and the operations will take place without console intervention, except in the case where the directory size for a new library is requested. The syntax is: Page 9 of 14 83-08-16 Documentation for LU.COM and LRUN.COM LU [ [ ...]] [ [ ...]... where square brackets indicate optional parameters, and: is any operator. is any operand. ... indicates that the preceding parameter may occur multiple times. Any names occurring prior to the first operator, or following an operator which does not expect operands, are ignored. | CRC CHECKING | | Whenever a new member is added to a library, a value | called the CRC (Cyclic Redundancy Check) word is calculated | and stored in the member's directory entry. When the member | is extracted from the library, the calculation is done | again, and compared with the saved value. If the two values | do not match, it is an indication that the member was | damaged in some way while it was in the library. The extract | will still be performed, but a message warning that the | extracted copy is questionable will be displayed. | This feature is especially valuable for libraries which | have been created on another system and transmitted by phone | (possibly several times) before you receive them. It helps | insure that the extracted files are faithful reproductions | of the files originally inserted before transmission. | Members added by LU versions prior to 2.20 do not have CRC | words. The CRC check will be bypassed when one of these is | extracted. | The CRC word of the directory itself is checked when | the library is opened. A message warning of a CRC error will | be displayed at that time. Libraries modified by LU versions | prior to 2.20 have no directory CRC word, and the CRC check | will usually be bypassed. If a warning does occur, it will | not adversely affect operation. | When a library is reorganized, CRC words will be added | to all members, if not present. CRC errors which occur | during reorganization will cause the program to abort. The | damaged member must be deleted before the library can be | reorganized. | Libraries created by this version of LU can be read by | all previous versions. The CRC values inserted will simply | be ignored by early versions of the program. Page 10 of 14 83-08-16 Documentation for LU.COM and LRUN.COM ADVANCED FEATURES Input from BDS C "pipes" or ordinary sequential files is also possible. The filename is specified on the command line preceded by a "<" character and no intervening blank. Example: LU ". This applies to parameter driven as well as interactive (including "piped") input. Examples: LU -O 3/SPECIAL -A B:ZOT.COM >20/C:LOGFILE.OUT would add the file zot.com from drive b, current user area, to the library special.lbr, in user area 3 on the default drive. Console output would be written to a file called logfile.out in user area 20 on drive c. The placement of the output name on the line does not matter and except for turning on redirected output, it is ignored by all operators. LU B:RECORD.DOC would take interactive commands from the file batch.in and write console output to a file called record.doc on drive B. Normally, console file output is also echoed on the real console, except when input is also redirected, as in the last example. To force visible console output when both an input and output file are used, the ">" character preceding the output file name may be changed to a "+" like this: LU +RECORD.DOC prompt returns, do not hit RETURN. Instead, abort the program with Control-C. This will cancel the program without updating the directory, and the original members will still be present. Here is another caution. Since the entire directory must fit in memory for a library to be successfully opened, it is possible that a huge directory created on a your system will be too large to fit in memory if read on another system will less memory. This should not be a problem with a library of under a hundred entries. To give you an idea of how much elbowroom you have to work with, LU displays the highest memory location used each | time it terminates. This will vary depending on the size of | the disk I/O buffer, as well as the largest directory used | during operation, and will be slightly higher if interactive operation was used, since a console buffer must be allocated. It does not include the stack, which grows down from high memory, and is allowed about a thousand bytes of space for subroutine parameters and temporary work areas. Page 12 of 14 83-08-16 Documentation for LU.COM and LRUN.COM THE LRUN COMMAND The LRUN command was created for those of us who have lots of command files we like to keep on line all the time. We all have some favorite little .COM files are very small programs, but having a lot of them on disk eats up file space at an alarming rate due to the fixed CP/M block size. Put them all into a library called COMMAND.LBR using LU. You can then run any .COM file directly from the library by saying: LRUN The full syntax of LRUN is: LRUN [-] [] Where: is the library to be searched. The square brackets around - indicate it is optional. The - character tells LRUN that what follows is a library name. It is not an actual part of the name. Don't leave a space after the -. If the first parameter doesn't begin with - then the default library COMMAND.LBR is used. If a drive spec is given, such as B:, then only that drive is searched for the library. If no drive spec is given, the current area is searched first, and if no library of that name is found, the default area is searched before giving up. The default area is set to 0/A: in the distribution object code, but this can be changed to something more appropriate for your system by changing two equates in the source program and reassembling. LRUN does not otherwise support user numbers, and will not recognize the "u/" syntax on its parameters. If a name, but no type is entered, .LBR is assumed. is the name of the command to be run. No drive spec is used here. The type defaults to .COM and need not be entered. is a the normal (possibly empty) list of parameters which the .COM file expects to find on the command line when it is run. This list is parsed to the required file control blocks and command line area before execution begins, so the program will not be aware that anything cute is going on. (Thanks to Ron Fowler for supplying the code which makes this possible.) LRUN EXAMPLES LRUN ED FOO.BAR the file ED.COM is searched for in COMMAND.LBR on the current drive, or the A: drive. If found, ED.COM is loaded from the library, and FOO.BAR is passed to it as a parameter. Page 13 of 14 83-08-16 Documentation for LU.COM and LRUN.COM LRUN -C:SPECIAL LU -O COMMAND -A A:*.COM the file LU.COM is searched for in SPECIAL.LBR on the C drive. If found, LU.COM is loaded, and the strings -O, COMMAND, -A, and *.COM are passed to it as parameters. LRUN - -ZIP the file -ZIP.COM is searched for in COMMAND.LBR on the current drive, or the A: drive. If found, -ZIP.COM is loaded and executed with a blank parameter list. Since -ZIP.COM begins with a -, the extra - followed by a space was needed to act as a place-holder for the library name. Compare with: LRUN -ZIP the library -ZIP.LBR is looked for, but nothing else happens, because no command was specified. LRUN with no parameters at all, causes a screen of help information to be displayed as a memory refresher. Please report any problems or suggestions for enhancement to me via CompuServe CP-MIG or EMAIL, user number 70160,120; or by phone at (201) 935-4087, voice, evenings (eastern time) or weekends. Gary P. Novosielski Page 14 of 14 83-08-16  ~#fon&m6}ʽ6͐ ?͐^#Vr+snѯg`is#r~6͐6!967!9DM! n&6|6! n&6! n&!9DM! n&aͯ07! n&zͯ  |F7""|7 ! ###R7""  Wait a few seconds, and type a CR: $*>Hʮ777*|g}o"zg{o"|g #+|7'z7 777*+++:G_*DM!8o&=y5x5   Ú+=,M7|§*5~#foM7s#rM5*56#6*7w#w M5H * ----------------LDIR MQG LUDEF2 DQC"LDIR OBJ38LCRCK C k LCRCK COMu)LIBACC CQ LRUN OBJLTYPE OBJALU300 DQCLU300 OBJLRUN AQM5uLTYPE C  CALL NEGDE ;IT'S STILL IN LOWMEMORY R DA D JNC NOFIT ;Haven't overwriv`LDIR212.MSGJ    "!#$%&'()+*-,0./12345796:8;<>=C?@BAGFIEDHoםW:˕ԔT-P}̲,Y;~:=#0Dc\wѯj;Mg~8R,%Բll:ĽŇ_tם\xM%MCƞGY7@2Dc4h3,i^`V-yerϑ|ZT+_y}m'#m+sI[/ҮJ0uX .?{b}-?>F},p#Txs-y}k}k> Z'{ӎӖ{rx¯z՝M]^XF9Mgrr&q]iS{¹-~kS` ;unPvT+`8Qi}-vs䪷P ?fzgGﵕڦ?f,p3or|MYg^w=;Ğd:iRY {/J@DC_x2 lz3 DN絮ޤ?u' 6Cu\p\|kOW7usdbtpoBF46 .V!sV/{]^1j2g;Ğd:Uoy[II[3Y ]&>s&q0zu Jʱ'[myn{{x 7]$!=m> ) //J^ڐ,r3'&yOO]ug.Jbis K~?J}jJvTv(-/ъ[Ll |YQ+MVM? \fA#s?{Q\yv,p% 4ӼS6] rnsá"Vj۱⌅'k><ς˚Dqu˕z-!#,J[{Ƚ.CVFF.'r$gqϮԲ"W,ETT5MvY|b^^#35YBl V\]OJjY6;(Q4q[O~CuY&o>b1C!s݅(LQ ,p#Txs-y}k}k> Z'{ӎӖ{rx¯z՝M]vcLUDEF2.DOCV    "!#o$&%'()+*,.-0/1243657:98;=<>?@ACBDFEGHIJKLONMPRQSTUy+vX#,J~cJ<G\I:Y'nJy;WG:edKᘰO%Ǻk$]뾒;vvi c x$}C~-{w_oM@m=WO}p$vGo=ymf % W魜 %|v8R7%[)>J|kcӼi}-=u}Ѕ)4g P_LC̶WOoЯk=ԄE;cXO^o=5i;n;NMXCWڥ:k0<|б =y̓N3ˊ,(;S톭6}'oXדW)1RrVۑv;Fo'G\!5Z9[k=yU o٫{sT|]B̕} 9~l)??߮'nVF kdKwzolڡqj‚f}l޷fos']* d5WB~e߼J|;w t>6ۙ_7![yj¢i!5ڳ^*d%>{5Sw~'q= qdcwfm'ڥra1wNYsT@. ?0VaramKzo4OMX{.ӯ-s o7lIrTi=ūyf}3tBwToGirZʵN~4O&,ZkI/7?"g"CtԄE; f5/{5n̕8΂hχ,h3(bXQ< VNz򺯼GGhS״+AJaE?׾F6vyj¢v_FO,nڇG/~;,(iOgAak+3ٛ-2_~4."~XQ< //;Og~}AJaE(NYhvF௜v/z~XQ7N\6َPJ(nXQl8{SAOC9p:5miOgAc6B0';ݞ΂+F~ f5 _ԄE;,(aXQٛ;p nYBK r_y;MF]zE`M;7A,%YY7|(*w_y_Ztv!ӾaE6 ~i~WC qzIדCk.N{eQϧϗdnиzkڕR@F4N W[rna8+}M[$}{JYXϭC=֨P_9E>>=lXQ[Y 7 kiB6: ]2lu_;tawYm崞հpؠS-spjrGtzB5Ne7^m𵧳 χ,h3(΂x}ЅiBgAS7_AzN7v$״75+܃Z9gQ WMeWX[9gQנYoWN: E6v 7A? W)0}ӰO~ŠnoWNԄE|M]J1,(ڡK:_AzSy:B|Ar!-QWVziv>Y}=Ky}==ځq_;tawZOjFoQ־Y[9M z)~nrY|]O6(k<ج/Yqy+HuWN: i=ūW糿wײ'>vC9sg/>+Ho)rYέk|Я)tD;k\N|#C ,Jh7.+Ho֮0~;@ksٸJ|8C-Y/if΢_Azs}i#u_K3Y:v }ЅiIXiKoOvWsi=x(=}*}1mKl>}y8 pLk|*{[5^KI_9ʿ[ a٧zk>:te$#ctS$Cl}VYhu~g˫k4 c>诜ՆS,Ŧ_2+o*5mBY4bv%4*Hrjg)IV5-8BwOaz+X9 9~lj(GвӚ6Zܧ##L>NE@ϩ fj6OMX+gu_; YEfG[-y_;zO|M>,}bCiϞqy+H9~M[zSSZ9-߲ޚt_y;toe/Wc;_6g=6BP(Wp_y;tov%4,(f}qőݩ]pZ`t_y;t?zZR Z2"Kz~9{PB+oY 9< fo[9Q_v,7 M0}+x4OMXC9QB9t8r_| [O=_;tدB(Xw^ c.]W9Չ v=bbo-dP3P." b' t_+N"=V~YB`E4<Ikc tj)_iu,Iܙ!O?f%%oY W<,k| ݎQ̮t`3]Xitّu_ځm:|>דr_t8cSB6vX-d~nV+ ٰp`%g̓q/X9-s |= zNx8"dki8 ;b͡z&vzÕùEK]0 2͵ ^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2cZZk:c|/g}/o#|/g}/o#:c<2cqDM!xxGyO҃)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2cZZ͉M|}ȯ|g}o)|/g}/o#z/W{/_!9~#fo! ! ! ! ! ! K!9~#A!9"q**q"e!c*"_!"a!Y"C>2Y>2\>2[2^>2m2n>2l>2p!";!"?!@"=!"A !F#x:~#!e2d~# :" 2d +}|~#:G:dx."2d+w# +6# !6#@**|^+R2i2:*e!#"0!#"2!>ڋo&͕=|  v~2ʷ͹56!+W ?_!~7z?ͤ:>͛@w#2.ww#w#w#w*>?=͉;w#͉2> w#=ͤͲ 2l&0OxGͲg/ʃPxY͛.7:77!a{  ʥ ʥ0:?ŷO !y$ 7o&))T])))!y 2k_ :kame1 [[