IMD 1.16: 28/05/2007 17:27:38 -FOG/UTL057         -FOG/UTL057/UTL#057CRC/UTL#057DOC,-CV20 COM CV20 DOCFILTER4 COM*FILTER4 DOC+LBL1&3 DOCLBL1ACRSBAS LBL3ACRSBAS N20 AQM@&'()N20 COM#$N20 DOC%OKICHAR COM OKICHAR DOC&PK COMPK DOC,"*REFORMATBAS) REFORMATDOC SAP40 AQMC !SAP40 COM SAP40 DOC 1:] ʰ!e~ #6O#6K#6I\`! 6# y5! 6#6%#6A#6 ! 6#6%#6A#6!! Í  w!e!! Í\ѷ~ʥ•Í+++"=͓= 8OKICHAR 1.0 - (c) E.Meyer 8/84=!8-------------------------------t͓=58Undefined characters in this set:=6.!4~3> ͆#+͓=73!*~P> ͆#H͓=28Enter character, or to save: ͟Ҙ!Ҡ >͆XO!#~¤~!! ~ʘõ+";~w*=6#6%#6A";#q "=͓=28 Character *;#  ~͓͆ - to save =58 =6. Use arrow keys to move, spacebar to toggle pixels.=73 ( Other commands: R/L/U/D, A, Z ) %*;~Aʺ'B##t6s͟  UG_ARʧLUwDʏZ_:% shift to next bit of byte */ } } return (sum); /* return CRC */ }  high bit of byte */ if (b) sum ^= 0x1021; /* CCITT polynomial */ c <<= 1; /*:?:2:J>͆>͆>yO>@yO>L#>B+~wj *;##6#g*;##*;## ~?w#€*;## ~~w#˜ *; +~#w+³6*;## #~+w#6*;D~AApí*;## ~#~+> OKICHAR.DOC ----------- Documentation for OKICHAR.COM Version 1.0 (c) E.Meyer 8/84 OKICHAR is a utility for designing special character sets f͆íyO#*=6#62\2h2|\  V!?\l\ѷ>͓͆=$A+-----------+=%A| |=&A| |='A| |=(A| |=)A| |=*A| |=+A| |or the Okidata 92/93 printers. Since Okidata provides software for this purpose only for IBM and Apple computers, I have written my own CP/M version. OKICHAR lets you design each character conveniently on screen, and builds up a disk file contain=,A| |=-A| |=.A+-----------+%*;~AF'BB##~jyOMP#{MMs>*͆>͆>=͆z͆{͆_㯆#͆Ól͓++ file error ++͓++ i/o error ++AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRing all the character definitions. This file can then simply be PIPed to your printer to install the characters. That is, once you have used OKICHAR to create a character file, say "MYCHRS.OKI", you simply need to (1) turn on your Okidata printer rSsTtUuVvWwXxYyZz0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ {͆_㯆#͆Ól͓++ file error ++͓++ i/o error ++AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqR (2) PIP LST:=MYCHRS.OKI and you will be ready to print with the characters you have designed. SYNTAX: A>OKICHAR filename.typ If you do not specify "typ", it will assume the default "OKI". If the file exists, it   will be read in for modifications. If it does not exist, a new, blank file will be created. You will then be in edit mode. EDIT MODE INSTRUCTIONS: You will see a "box" on the screen, in which the character will appear, dot by dot. This bo" Choose one letter: Hqqqq]q.qqq2_v" :_CʳWPPPSʚTʺLʕRQLLqq}>2j" qHq}" Does the file contain lower case characters (Y/N)? x is eleven dots (or "pixels") wide, and nine high. As you will know from your Okidata manual, the character matrix is eleven by seven. Consequently you can use only seven of the nine ROWS at once. Whether it's the upper or lower seven depends on wheY >2b"Removing all extra spaces and carriage returns... >2j2kq:_Wjq}{q}I" Removing all inbeddedEqq}"Enter print control characters you want to remove from the file (use CTRL key), and pther the character you are working on is an ascender or descender. (The default is ascender.) You will be asked WHICH CHARACTER you want to design: this means, of course, the standard character whose ASCII code corresponds to that of the new charress when done: I" Removing all selected" print control codes:jʭ" and WordStar formatting codes:k­", including dot commands"... q.q}}"Removing rubout characters only... !e6!"qacter you wish to create. You may choose any printable character (no control codes or space), for example %, or W. A list of as yet undefined characters is visible below for reference. (If you pick an already defined character, you will be modifying !"s*q|}~#"q2dO2d:em):p:mm:e͗{:p:d2e]2p:_T¦:e ʢ ʢ :o<£2o:eu*sw#"s¿2p|}ɯ2pu2p!u"q>2p!"1v" FILTER Version 4.0 Copyright 1983, 1984 by Claude Ostyn P.O. Box 2035 Sitka, Alaska 99835 (Enter ESC to exit) }Q ʕ " Can't find that file. Try again. ì͏ T T}s>" File copied okay. :c•" One or more ambiguous hyphen was found and replaced by a "#-" pair of characters in the output file. You will need to use your editor to do the necessary correction(s). Õ"Copy stopp  ed... Do you want to save what has been copied so far? YNL:>}" Terminated at operator's request - file not copied! " Copy another file? YN " ñ" ...Program terminated. >e! Ï " Output file already exists... OK to overwrite (Y/N)? Yʟ NO " Use another name for output file (Y/N)? Yʖ ͏  " Deleting old output file... >>" No room on this disk..." Try " Write error on output file... :j9:e2e!m6:_R:k:_Le1 :m ß:m:_C{M ßP† ßT‘ ßWœ ß :p:m:j! !m~:l6:e2f:m:g2h:e2g:e. :f >2lanother disk (Y/N)? Y# >:3 >2>8 >2>" This may not work if the new disk does not contain the CP/M system tracks... Insert disk for copy in drive :>@": and press any key, or ESC to exit  >ɯ >>2m  :l>2l2m>2e :_C:g :e !m:d E 6> 2e6 !m~:`ʎ :e , ʲ x x >2i:e- $ $ :e ʲ (ʽ C ʽ :g >2`2b:e2a> 2e{:p> 2e{:p:a2e:g-:d>"!v6+6 !v~^#6*!w:x]:]!y:w.AZB™@~ʘ.{.#x{]* ƒ#~ʘ. ˆ" Bad file name, try again (or just RETURN to exit): " On which drive? @- >#2e{:p>-2e>2c2i>2i :i :g m G!x \ :hGx m :bm :gZ!m6>2`:i :g ʠ :f  :h.:?! :i :g :` :g > 2e6:e :o G> 2e͗{x" That drive does not exist! !> D#4>>" Should the copy retain the WordStar formatting codes, such as soft spaces, soft returns and soft hyphens? Y!j6" Do you want to retain any dot commands found !m6! !:eG!m !m:eB  H < > 2e>-2e:g ̈́" Name of file to copy from:  :2͟" Name of file to copy to: > :>2>*" Input and output files cannot be the sam in the copy? Y>2k!lpW!~g#:^zw@_xn###xx#+6$>> >#  ʹ ª>.:n<2n3>2n> 3> > ɯx#>>G   x.Gx_㯆#"GC@x_xGxaVxƅV>>GxAmxƥm>> ")"(u!6#|Š}Š! ͭ!>6!? ͭ> w#x­ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.:?!%|>]*_1234567890L - Remove line feeds, and pad blank lines with a space. $C - Remove extra carriage returns and spaces (leave only paragraph breaks, "unjustify") $W - Change a WordStar file into an ASCII file $P - Remove all imbedded print commands $S - Remove selected imbedded print commands $T - Replace tab characters (09h) with spaces $R - Remove any "rubout" characters (7fh) only (done automatically by other options above) $Q - Quit $Option selected: $ Remove all imbedded print commands $S - Remove selected imbedded characters (7fh) only (done automatically by other options above) $Q - Quit $Option selected: $ Remove all imbedded print commands $ LBL1ACRS.BAS & LBL3ACRS.BAS These are two short programs for printing multiple copies of labels with a single address, you specify the number wanted by responding to prompts. They are set up for four lines ofS - Remove selected imbedded Copyright 1983 by Claude Ostyn input, if you only want 2 or 3 lines press the return key in response to the prompt, a blank line will appear whenever this occurs. USES: Make up a batch of labels for use in filing medical claims with the   insurance company or for rent checks etc. Make your own return address labels. If in business for yourself make reminder labels for your bills. Use to make file fol your local user group meeting, someone will be able to help. To line up the labels in the printer you need to experiment, it will help to run a few off on your regular paper to get some idea of the placement. While doing tder labels. LBL1ACRS: Set up for tractor fed labels 3 1/2" x 15/16", you can specify the number you want to print from 1 to whatever. LBL3ACRS: Set up for friction fed 8 1/2" x 11" sheets of 2 7/8" x 1" labels 33 to his also note the location of the printhead relative to the first line printed. The input lines are not dimensioned, all this means is that you shouldn't try to put a 5 inch line on a 3 1/2 inch label! Seriously, the reasoa sheet, these are the sheets that are normally used with photocopy machines. When prompted for the number of labels the reponse will indicate the number of ROWS of labels, e.g. a response of 1 will result in 3 labels, 2 will produce 6n for this is to permit using 3 1/2", 4" or 5" by 15/16" labels without the need to make changes. 5/24/84 Marje Pattison  labels and so on. On my Epson printer I cannot print more than 10 rows to a sheet although there are 11 available, the friction feed mechanism doesn't feed the last label row on the sheet. NOTES: The vertical spacing is set up for 6 lines per inch and the horizontal for 10 characters per inch. If you need to make changes and are not sure what to do, load the program, turn your printer on and LList the program; take the listing to   arje Pattison : c2: : P.O. Box 787, Sebastopol, CA 95472 :Rc<: : 05/23/84 :cF: :...............................................:cP: :...............................................:cZ: %ddHCL$()() :HOME CURSOR & CLEAR SCREENJdnCLR$() :CLEAR SCREENdx C$(X,Y)()"="(X )(Y ) :USER DEFINED-DIRECT CURSORd CLR$ : C$(,); "...LBL1ACRS by Marje Pattison...e C$(,); "PROGRAM TO PRODUCE MULTIPLE COPIES OF A LABELAe C$(,); "WITH USER INPUT FROM KEYBOARDe C$(, ); "The program has been designed for use with 6 lines ande C$(, ); "10 char. per inch spacing and can be used to produce #f C$( , ); "multiple labels for a single addressee or individual nf C$( , ); "single labels. Set up is for 3 1/2 by 1 inch labels,f C$( , ); "with tractor feed backing.f C$( ,); a : .................................................;b: : :b: : ...LBL1ACRS.BAS... :b(: : Compliments of M"'Y' OR 'N' PROMPTS REQUIRE UPPERCASE RESPONSEg C$(,) "Do you wish to continue? ( Y or N )4gC$ : C$ " " ig C$ "Y" C$"N"  : C$ "Y" g C$ "N" &g HCL$g  :  : ....LABEL   ROUTINE....g "LINE 1: ? "; N$g" HCL$h, "LINE 2: ? "; A$h6 HCL$4h@ "LINE 3: ? "; S$?hJ HCL$`hT "LINE 4: ? "; Z$kh^ HCL$hh N$ : A$ : S$ : Z$hr C$( ,) "Is this correct? ( Y OR N )h|B$ : B$ " " |i B$ "Y" B$"N" | : B$ "Y" i B$ "N" %i HCL$Li "HOW MANY LABELS DO YOU WANT"; NWi HCL$~i C$(,); "PROGRAM IS EXECUTINGi I  Ni I N i : N$ : A$ : S$ : Z$ :i Ii CLR$j C$( ,) "Do you want to print more labels? ( Y or N ) 5jF$ : F$ " " dj F$ "Y" F$"N"  : F$"Y" yj F$"N" &jj& HCL$ : N ) 5jF$ : F$ " "  a : .................................................;b: : :b: : ...LBL3ACRS.BAS... :b(: : Compliments of Mted.f C$( ,); "'Y' OR 'N' PROMPTS REQUIRE UPPERCASE RESPONSE,g C$(,) "Do you wish to continue? ( Y or N )KgC$ : C$ " " g C$ "Y" C$"N"  : C$ "Y"  g C$ "N" Xg HCL$g  :arje Pattison : c2: : P.O. Box 787, Sebastopol, CA 95472 :Rc<: : 05/23/84 :cF: :...............................................:cP: :...  : ....LABEL ROUTINE....g "LINE 1: ? "; N$h" HCL$'h, "LINE 2: ? "; A$2h6 HCL$Ph@ "LINE 3: ? "; S$[hJ HCL${hT "LINE 4: ? "; Z$h^ HCL$hh N$ : A$ : S$ : Z$hr C$( ,............................................:cZ: %ddHCL$()() :HOME CURSOR & CLEAR SCREENJdnCLR$() :CLEAR SCREENdx C$(X,Y)()"="(X )(Y ) :USER DEFINED-DIRECT CURSORd CLR$ : C$(,); ) "Is this correct? ( Y OR N )h|B$ : B$ " " | i B$ "Y" B$"N" | : B$ "Y" 5i B$ "N" @i CLR$ki "HOW MANY LABEL ROWS DO YOU WANT"; Nvi HCL$i C$(,); "PROGRAM IS EXECUTINGi I  N"...LBL3ACRS by Marje Pattison...e C$(,); "PROGRAM TO PRODUCE THREE-ACROSS LABELS WITH" Ee C$(,); "USER INPUT FROM THE KEYBOARDe C$(, ); "The program has been designed for use with 6 lines and e C$(, ); "10 char. per i I N i i N$ ; ) N$ ; 9) N$j A$ ; ) A$ ; 9) A$j S$ ; ) S$ ; 9) S$>j Z$ ; ) Z$ ; 9) Z$ DjLj IWj CLR$j& C$( ,) "Do you want to print more labels? ( Y or N ) j0F$ : F$ " inch spacing and can be used to produce &f C$( , ); "3-Across labels approximately 2 3/4 x 1 inch whichxf C$( , ); "come on 8 1/2 x 11 inch sheets without tractor feed. f C$( , ); "Single or multiple ROWS can be prin" 0j: F$ "Y" F$"N" 0 : F$ "Y" jD F$"N" XkNkX HCL$ : ) j0F$ : F$ " Z$ ; 9) Z$ DjLj IWj CLR$j& C$( ,) "Do you want to print more labels? ( Y or N ) j0F$ : F$ "   10 CLEAR 20 PRINT CHR$(26) 30 PRINT" REFORMAT.BAS by Gobind Singh Khalsa":PRINT 40 PRINT"Is a program to reformat disk data files 50 PRINT" more to your liking..." 60 PRINT 70 PRINT"It is assumed that:" 80 PRINT" Records are separated by a CR/LF combination, and" 90 PRINT" fields within each record are delimited by commas" 100 PRINT" and there are the same number of fields in each 110 PRINT" record. " 120 PRINT"Things get done in the following order:" 130 PRINT" Drop preceeding & trailing" 140 PRINT" Find & Replace" 150 PRINT" Add preceeding & trailing" 160 PRINT" Adjust field length & truncate" 170 PRINT 180 PRINT" Find = will find all characters" 190 PRINT" Replace = DeletE will delete the field" 200 PRINT" Add Preceeding or Trailing = ";CHR$(34);",";CHR$(34);" will add a field" 210 PRINT:PRINT 220 INPUT"Hit to continue ";N 230 PRINT CHR$(26) 240 A$="":B$="":C$="":D$="":E$="":F$="":G$="":H$="":I$="":J$="":Z$="":Q$="" 250 DD$="":FF$="":LL$="  N":L$="":MM$="":OK$="NNN" 260 M=0:MM=0 270 PRINT"What is the full name of the file you wish 280 INPUT"to re-format ";A$:PRINT 290 INPUT"How many fields per record ";NN 300 INPUT"Modify only field # ";M 310 M=ABS(M):IF M>NN THEN GOTO 290 320 IF M<1 T must ":PRINT"be bounded by quotes (i.e. ";CHR$(34);" ";CHR$(34);" )" 520 INPUT"Specify a length for each field (Y/N) ";LL$ 530 IF (LEFT$(LL$,1)="Y") OR (LEFT$(LL$,1)="y") THEN INPUT" Field length = ";L:INPUT" Justified (L)eft or (R)ight ";L$:IF HEN GOTO 370 330 INPUT"Only if field # ";MM 340 MM=ABS(MM):IF MM>M THEN GOTO 290 350 IF MM<1 THEN GOTO 370 360 INPUT"Contains string = ";MM$ 370 PRINT"What name do you wish to give to the resulting 380 INPUT"output file ";B$:PRINT 390 IF B$=A$ THEN (LEFT$(L$,1)<>"R") AND (LEFT$(L$,1)<>"r") THEN L$="L" 540 PRINT 550 INPUT"All entries correct (Y/N) ";J$ 560 PRINT CHR$(26) 570 IF (LEFT$(J$,1)="N") OR (LEFT$(J$,1)="n") THEN GOTO 270 580 PRINT:PRINT:PRINT:PRINT:PRINT" Please don't interrupt untiGOTO 270 400 PRINT"Do you wish to drop:" 410 INPUT"Preceeding (Y/N) ";C$ 420 IF (LEFT$(C$,1)="Y") OR (LEFT$(C$,1)="y") THEN INPUT" Character (blanks are assumed) ";D$:IF D$="" THEN D$=" " 430 INPUT"Trailing (Y/N) ";E$ 440 IF (LEFT$(E$,1)="Y") OR l I'm done..." 590 OPEN "I",#1,A$ 600 OPEN "O",#2,B$ 610 REM INPUT SECTION 620 YY=1:OK$="YYY":M1$="N":M2$="N":M3$="N" 630 INPUT#1,Z$:IF EOF(1) THEN GOTO 790 640 IF M=0 GOTO 660 ' No selective field processing 650 GOSUB 1160 ' See if this is the s(LEFT$(E$,1)="y") THEN INPUT" Character (blanks are assumed) ";F$:IF F$="" THEN F$=" " 450 PRINT"Do you wish to add:" 460 INPUT"Preceeding (Y/N) ";CC$ 470 IF (LEFT$(CC$,1)="Y") OR (LEFT$(CC$,1)="y") THEN INPUT" String = ";DD$ 480 INPUT"Trailingelected field 660 IF OK$<>"YYY" THEN GOTO 740 ' If not, skip 670 REM PROCESSING SECTION 680 IF (LEFT$(C$,1)="Y") OR (LEFT$(C$,1)="y") THEN GOSUB 840 'Preceeding 690 IF (LEFT$(E$,1)="Y") OR (LEFT$(E$,1)="y") THEN GOSUB 870 'Trailing 700 IF (LEFT$(G$ (Y/N) ";EE$ 490 IF (LEFT$(EE$,1)="Y") OR (LEFT$(EE$,1)="y") THEN INPUT" String = ";FF$ 500 INPUT"Find & Replace (Y/N) ";G$ 510 IF (LEFT$(G$,1)="Y") OR (LEFT$(G$,1)="y") THEN INPUT"Find = ";H$:INPUT"Replace = ";I$:PRINT "If a blank is specified, it,1)="Y") OR (LEFT$(E$,1)="y") THEN GOSUB 900 'Find & Replace 710 Z$=DD$+Z$+FF$ ' Add preceeding & trailing 720 IF (LEFT$(LL$,1)="Y") OR (LEFT$(LL$,1)="y") THEN GOSUB 1040 'Adjust field length 730 REM OUTPUT SECTION 740 IF NOT (I$="DeletE" AND OK$="Y  YY") THEN Q$=Q$+","+Z$ ' Connect the fields to form a record 750 YY=YY+1:IF YY<(NN+1) THEN GOTO 630 ' If need more fields 760 Q$=RIGHT$(Q$,LEN(Q$)-1) 770 PRINT#2,Q$:Q$="" 780 GOTO 620 790 CLOSE 800 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT 810 PRINT"150 RETURN 1160 REM Is this the field to change? 1170 IF M=YY THEN M1$="Y" ELSE M1$="N" 1180 IF MM=YY THEN M2$="Y" 1190 IF MM=0 THEN M2$="Y" 1200 FOR X=1 TO LEN(Z$)-LEN(MM$)+1 1210 IF MID$(Z$,X,LEN(MM$))=MM$ THEN M3$="Y" 1220 NEXT X 1230 IF MM$=""  I'm done !" 820 END 830 REM SUBROUTINES 840 REM 'Preceeding' subroutine 850 WHILE LEFT$(Z$,LEN(D$))=D$:Z$=RIGHT$(Z$,LEN(Z$)-LEN(D$)):WEND 860 RETURN 870 REM 'Trailing' subroutine 880 WHILE RIGHT$(Z$,LEN(F$))=F$:Z$=LEFT$(Z$,LEN(Z$)-LEN(F$))THEN M3$="Y" 1240 OK$=M1$+M2$+M3$ 1250 RETURN +1 1210 IF MID$(Z$,X,LEN(MM$))=MM$ THEN M3$="Y" 1220 NEXT X 1230 IF MM$="" M=0 THEN M2$="Y" 1200 FOR X=1 TO LEN(Z$)-LEN(MM$)+1 1210 IF MID$(Z$,X,LEN(MM$))=MM$ THEN M3$="Y" 1220 NEXT X 1230 IF MM$="" :WEND 890 RETURN 900 REM 'Find' subroutine 910 IF I$="DeletE" THEN Z$="":GOTO 970 920 IF H$="" THEN GOTO 960 930 FOR X=1 TO LEN(Z$)-LEN(H$)+1 940 IF MID$(Z$,X,LEN(H$))=H$ THEN GOSUB 980 950 NEXT X:GOTO 970 960 FOR X=1 TO LEN(Z$):GOSUB 980:NEXT X 970 RETURN 980 REM 'Replace' subroutine 990 Z1$=LEFT$(Z$,X-1) 1000 Z2$=RIGHT$(Z$,LEN(Z$)-LEN(H$)-X+1) 1010 Z3$=Z1$+I$+Z2$ 1020 IF H$="" THEN Z$=LEFT$(Z3$,LEN(Z$)) ELSE Z$=Z3$ 1030 RETURN 1040 REM Adjust field length subroutine 1050 IF L$="L" THEN GOSUB 1080 1060 IF L$<>"L" THEN GOSUB 1120 1070 RETURN 1080 REM Justify left subroutine 1090 WHILE LEN(Z$)CV20gh Khalsa uld think of ever wanting to do to a database. REFORMAT.ASC is the result. Instructions are in the listing. -- Gobind Sin d:FILE1.typ d:FILE2.typ in which FILE1 and FILE2 are the filenames of the files to be compared. Amenu of the commands available is displayed and these commands permit scrolling 1, 4 or 7 lines of a file at a time or continuous scrol  ling of one or both files. CV20 is designed for comparing ASCII files. However, files that include control characters may also be compared because non- printing control characters are displayed in the form of "[xx]" in which xx is the  2337 Marbury Road Pittsburgh, PA 15221 Robert J. King ޣdU|1ML^a9&ٕ )!Ϯ,0!Q6&\.ޝ\YA81˜w&Έ{3!􄟭^XٜEbh %;.oaE %cg-0!}ۙpy  hexadecimal code for the non-printing character. Normally, CV20 is used in the following way. The first command entered by the user is the "C" command which causes continuous scrolling of both files and continuous comparison of the  ----CHEK--------ver 1.0-------02/02/83---- FILE CRC CHARS RECORDS -FOG/UTL.057 00 00 0 0 /UTL#057.DOC BB 0A 3584 28 CV20 .COM 24 98 1664 13 CV20 .DOC 3C 1C 1920 two. When a difference is found, scrolling stops and the differing lines are displayed. By using the 1, 4 or 7 line scrolling commands, the line pointers for the two files may be repositioned to move them past the code containing the di15 FILTER4 .COM 7E AF 5376 42 FILTER4 .DOC C2 C5 384 3 LBL1&3 .DOC 96 13 2560 20 LBL1ACRS.BAS D3 2E 2304 18 LBL3ACRS.BAS A4 02 2432 19 N20 .AQM E2 37 8192 64 fference. Then the "C" command may again be given to automatically search for the next differnce. In this manner, all of the differences between the two files may be readily found. Continuous scrolling stops when the end of a file is reacN20 .COM D2 F8 3968 31 N20 .DOC A1 39 2048 16 OKICHAR .COM 4F E8 1664 13 OKICHAR .DOC 7E BF 4864 38 PK .COM EF 68 1024 8 PK .DOC 0A 35 5632 44 REFOhed or when a key is held down for a few seconds. CV20 has been updated from CV to permit its use on most CP/M systems including both the Osborne 1 and Osborne Executive computers. Robert J. King RMAT.BAS B5 90 5248 41 REFORMAT.DOC 0E D3 1152 9 SAP40 .AQM 57 A8 8576 67 SAP40 .COM 6F 1A 1152 9 SAP40 .DOC 90 8D 2432 19   0M1u> ,Lp0]! &\ >u> ZR/Lh&08&W: &`huLH2!ʄ *)aFgB e?%٨[&3:La©&4`ha0X41M-^ bj60Ϩj3 ́ 0ІϨj3 NK8[R0瀪GÄ  j|4L(ɕnk >T5>&,zDR F%YXŨ τ *EfpoQrӅm,Z,SɵXӕ5*NS70!&m2 ӕ5m2 900[7LXe5•[7Lɨx[7Lɨ$kLɨ5Vi&Äšza,&ČI 3ML%׮%#&m2 ӕ5m2C~•mb)+`ۺQ !g &,zĘ7b{]nʄEgB*"=ρ /LH2!JsUpŧnO cj| m;Sp* T5>&8uL(0ML+YJgu41SX0/L{ g 9T&\[SLE>4IFa02a9&bY&,DŽ0`B \8˄b 4 gfRO"n}?$Ո+Pe̅. 0&Äy0d]! &\V+*=bq ӕ5R/e)+`kRC|!Fex&Dp .lp4ucKcB'TL"Qn S /녱M]͗LXeLEX戩-Vj/$ 5L/7 iEJ3lMB7it3rhiLSqte܇HU5r.L< UdBԍ=I30 ql&g\8 KegeDaOL.:pa.M)' vτ;bY&8up nk3!{L{ g{&=JO 1xs,cBL{ gPa̅mm2mm 3mm`0a#|ÄGژa0CfSʄb {(0„ J(L`B ׇBLxsL!0X41MX.bo|?1MLSY&䐑І883X41Mѽ^$jo4䘂Tl4R6{`6P660_})\d$BL=/a0CfS- i"Q{So%u9 9ԤMbibza/R@e@f`:#Wc 9Y4?I/SOK&8uLpꐙԡ2X41Mz_Zt>n>T~ǿ1MLӢG;KŅbmfRibBZ&FŞfYcibp#Xۺ"!4Fꅱe0R~z2bTbpzam]mn2uqʶ_1MzaJȹ䗿 cۯ&녱X;/LHEۺ"!„OLX8/LHEF cx&,zD++k$ D&\[\2ĄOJi2a#¼`Fn0!䌀iټI_H&,zDf"Qn$u=[.WҬy`Zh ="  'd&~`B'd&xBe¢G2AK@deŢG[Pa9LdO}2Cl)Zd+˴+{Jq)e꫖%=/eiWLSYcB]I0!Q6&SBvufrL+&=j4S2یԯ_HY5[L ̈́ τb 0Ү_~LY|VZ,>a}΄\q=oħnŢ!|=_ϻ|=~gBOSbQ|cby;rG&M&-  ^J,ͅh";r!|=_|=_{.Fu|c>1a0!WQZ,}fȚm7ݚw&]..ԯ +kIYQRa΄\qc>1$uh%5Yuiẏ0+ẏ0yҌ: =Kf+]Jt |cEJNp!f&m-\ٝ |cރ<Ǘُw?{+_|wngB;{ RET ;..... ; ; ; Good read or write ; MORE: LHLD ADDR ;bump DMA address for next pass LXI D,80H DAD D SHLD ADDR LHLD DIRCNT ;countdown entries DCX H SHLD DIRCNT MOV A,H ;test for zero left ORA L JNZ DIRLOP ;loop till zero ; ݻ |c>1˜ݽ{R>{Gy,?}ww;r!Ƽ3!79 L̈́BB_ 70MLF+=궮Hȹ0!)P.u[W[+`ۺJKVRfҘƊiUB΅YcEGUSS 9&{0Jԥnj rLu[WiJl4Z=5VLkr.LrƊ\q/sqq&5rŁib23F; ; Directory I/O done, reset DMA address ; LXI B,80H CALL SETDMA RET ;..... ; ; ; Move utility subroutine ; MOVE: MOV A,M STAX D INX H INX D DCR B JNZ MOVE RET ;..... ; ; PACK: LXI H,0 ;I = 0 ; PACK1: SHLD I CALL INDEX O2U5ޙ|Ƨn: rŁ W:\Ž).&T&Χn72U5b ;^PEn8|dmEn8כ} ۺTmEn8כ} ۺ41M5k{k&q 6і˷bJa7Kɕ k 3:a76 S+qΟZ>n8dKhqؐa7K2q͙i /,;HL = BUF + 16 * I LXI D,9 DAD D ;HL = HL + 9 MOV A,M ;jump if filetype not 'X$$' SUI '0' JC PACK2 CPI 10 JNC PACK2 STA J INX H MOV A,M CPI '$' JNZ PACK2 INX H MOV A,M CPI '$' JNZ PACK2 INX H ;set extent number to x Lb;㆛_35>n+㆟!Lk7i՞ 55q_0>n93-ᅅ}psTl}pkf`7|TEUÄb dԝM5k{k&q 6і˷bJa7Kɕ k 3:a76 S+qΟZ>n8dKhqؐa7K2q͙i /,DA J MOV M,A DCX H ;set filetype to '$$$' MVI M,'$' DCX H MVI M,'$' DCX H MVI M,'$' ; PACK2: LHLD I ;I = I + 1 INX H XCHG LHLD DRM INX H XCHG PUSH H CALL SUBDE POP H ;loop until I > DRM JC PACK1 RET ;..... ; ; ; R we done? RZ ;yes, return past string PUSH H ;in case CBIOS clobbers it MOV C,A ;character to 'C' for CP/M CALL CO ;print character POP H JMP ILPRT ;continue ;..... ; ; INDEX: DAD H DAD H DAD H DAD H DAD H LXI D,BUF DAD D ead and write directory routines ; RDDIR: CALL ILPRT DB CR,LF,'---> Reading, ',0 JMP DODIR ;zero the write flag for now ;..... ; ; ; divide HL by 2 ; ROTRHL: ORA A ;clear carry MOV A,H RAR MOV H,A MOV A,L RAR MOV L,A RET ;.....  CV.COM AS OF 09/01/84 $ !9"~1~ !l 0\<ʬ<sͼ y} ?$&_YWHcU%J+I6KIO1LDCoQIMsn͞ ++END OF FILE1++ $ ¼ͥ a command should be entered. Press any key to continue $\XXXXXXXXYYY;1:  n ++END OF FILE2++ $ ͼnn8ͼ8nKKnͼWncnnͥ͞o&n!ͧ!ͧ;++CAN'T OPEN FILE 1++$;++CAN'T OPEN FILE 2++$*w#" :<2:G!2: \XXXXXXXXYYY;1: @!"2*w#" &:<2:G!8@!;"2~Y#@+~ > Y> Y ʍ ʍ ʍ rڍ>[Y͚Y͞Y>]Y_Ɛ'@'^#V#N#Fx#~G#~#fo>}ƀo|g½+~+w+++ç#~g}o| MOV D,A MOV A,L CMA MOV E,A LHLD SSORTV1 DAD D JNC NOSWITCH INX H SHLD SSORTV1 LHLD SSORTV3 XCHG LHLD SSORTV2 MOV A,E SUB L MOV L,A MOV A,D SBB H MOV H,A SHLD SSORTV3 JMP COMPARE ;..... ; ; NOSWITCH: LHLD SSTADg~ +p+q*""*~# x0 N *~ COMMAND FORMAT: CV20 FILE1 FILE2 $ & CV SCROLLS TWO FILES AS FOLLOWS: FILE1 CHAR FILE2 CHAR FUNCTION U J 1 LINE SCROLL I K 4 LINE SCROLL O L 7 LINE CV2 i a updat o C o FOG/UTL.010 I i use t compar tw file b alternatel displayin the o th CRT Plac th dis containin CV20.CO i driv an th tw file t b compare i eithe driv o B Giv th comman A>CV2SCROLL Y H CONTINUOUS SCROLL -- HOLD SPACE BAR DOWN TO STOP C SCROLLS BOTH FILES CONTINUOUSLY, COMPARING THE FILES AND STOPPING WHEN A DIFFERENCE IS FOUND. Q TO STOP AND RETURN TO CP/M M TO DISPLAY THIS MESSAGE A ? is displayed when d:FILE1.ty d:FILE2.ty i whic FILE an FILE ar th filename o th file t b compared Amen o th command availabl i displaye an thes command permi scrollin 1 o line o a file at a time or continuous scrol  ling of one or both files. CV2 i designe fo comparin ASCI files However file tha includ contro character ma als b compare becaus non- printin contro character ar displaye i th for o "[xx] i whic x i th 2337 Marbury Road Pittsburgh, PA 15221 ludin bot th Osborne 1 and Osborne Executive computers. Robert J. King  hexadecima cod fo th non-printin character. Normally CV2 i use i th followin way Th firs comman entere b th use i th "C comman whic cause continuou scrollin o bot file an continuou compariso o th it.) If you are all done editing characters, hit RETURN here, and the file will be saved to disk. Otherwise, type the character you want to design. You may then DESIGN the character. Note that your cursor is now inside the box. You can move ittwo Whe differenc i found scrollin stop an th differin line ar displayed B usin th 1 o lin scrollin commands th lin pointer fo th tw file ma b repositione t mov the pas th cod containin th di around with your "arrow keys" (see below). The space bar will toggle the pixel you are pointing to ON and OFF. Thus you can build up the pattern of dots that will form your character, such as: +-----------+ fference The th "C comman ma agai b give t automaticall searc fo th nex differnce I thi manner al o th difference betwee the two files may be readily found. Continuou scrollin stop whe th en o fil i reac |* * * * * | | * * | | * * * | | * | (etc) There are several "special" command keys in this mode;he o whe ke i hel dow fo fe seconds CV2 ha bee update fro C t permi it us o mos CP/ system includin bot th Osborne 1 and Osborne Executive computers. Robert J. King  a reminder of them is visible below for reference. These are: R,L,U,D - move the whole pattern Right, Left, Up, or Down; A - toggles between Ascender and descender character; Z - ZAPS the whole pattern bla  nk to start over. When you have the new character looking the way you want, you may save it by hitting RETURN. This brings you back to the first prompt above. Note: if you hit an illegal key, the bell will sound. This includes using an arrow keyV#"$~#fo:2+*Go!"&*A#??"!"*&#*:GS*(#o!x*DMm:+p„ø"(DMg"&DM*$ yDM:*js«ø~#OUß)))))*"*+"|:m~#!"ͮ ~0 2#~$ to go beyond the bounds of the character. It also includes trying to save a character that violates the peculiar Okidata rule that no two adjacent pixels in any ROW may be ON! If at any time you decide you have messed up, and wish to abort withou#~$#:w+6$+6$+6$*#*A#G͟ ---> Reading, |g}o:\=SOd:*ʹ2#͟Sorting, *#"8!".! ",*8?"8}˜*#}o|g",!"0".- x²"2"6"4~G# x$$>2#Fwx# x*8t saving anything to disk, type control-C. Once you have some character files on disk, you may send any of them to your Okidata printer with the CP/M PIP utility: A>PIP LST:=filename.typ In fact, you can later change t|/W}/_*0$#"0*4*2{ozg"4*.#"."0*,}|ڇ*6*2}o|g:#r͟(Previously sorted) - ͟Writing, >͟++ READ ERROR - NO CHANGE made Ü͟++ WRITE ERROR - directory left in UNKNOWN condition Ü͟ SAP 40 not useable o a new alternate character set by just PIPing it to your printer to take the place of the first. (Note: if the new one has any "undefined" characters in it, the previous character set may "show through" if those characters are printed.) TECHNICALwith M/PM or CP/M 3.0Ü͟++ READ ERROR - NO CHANGE made Ü͟++ WRITE ERROR - directory left in UNKNOWN condition Ü͟ SAP 40 not useable L*51͟ SORT AND PACK DIRECTORY v40 09/17/84  |}#2*G(laN͟DONE Ü!"ͮ~ʞ ~§##~_#~§*ͮ#~+-ʧ 6#  *A#*#Go*.>2y"z:^#":^#"A~#2<~#2=^#"?^#"C^"G^#  habetized listing. 2) Eliminates potential problems with "UNERASE" programs by removing programs with a similar name that have been previously deactivated. 3) Speeds up access via 'SD' and other special programs. 4) Assists on working directly on the disk with 'DU', etc. 5) Removes files from the disk directory that somebody else could recover. (The data is still out there somewhere). TO USE: A>SAP40 B: B: in this case indicate the desired disk to be sorted a SAP v40 -- SORT AND PACK CP/M DISK DIRECTORY -- 09/17/84 This CP/M utility reads the disk directory tracks, sorts the entries alphabetically and then rewrites them them back to the disk. All unused or erased areas on the directory tracks are rnd repacked. If not included, the logged on drive will be sorted. ======================================================================== 09/17/84 Added 'Previously sorted' statement that was included in v37 v40 but got droeformatted with continuous 'E5' characters. This completely removes previous file names from the directory which have been deactivated. All files of zero length are de- leted with the with the exception of files beginning with "-". This supports labpped from v38 when the Shell-Metnzer sort was put in. It still rewrites the directory even if previously sorted, to insure erased programs at end of directory are properly cleared. - Irv Hoff 07/27/84 Corrected sorting of last directoeling disks for the catalog program MCAT.) The program works with CP/M 1.4 and CP/M 2.2 but does not work with CP/M 3.0 or M/PM. Sorting the directory in this manner offers many advantages. Some of them are: 1) Allows 'DIR' to show an alpry entry. v39 10/16/83 Now using a Shell-Metzner sort which speeds the sorting time v38 considerably, especially on large directories. (SFK) 07/27/83 Shows an error flag for MP/M and CP/M+ both. Rewrites the v37 directory even   if previously sorted, to insure erased pro- grams at end of directory are properly cleared. - Irv Hoff 1977 Written by L. E. Hughes. Modified extensively since by Bruce Ratoff, Keith Petersen, James Prest, Ron Fowler, Frank Gaude, Sigi Kluger, Irv Hoff and likely others. ======================================================================== ten by L. E. Hughes. Modified extensively since by Bruce Ratoff, Keith Petersen, James Prest, Ron Fowler, Frank Gaude, Sigi DETAILS: OKICHAR was developed on my Osborne Executive, and should run on any Osborne, Kaypro or similar computer with no modification. First, your terminal or computer must support two ADM-3 standard control codes: ^Z to clear the screen, and ESC = to position the cursor. Otherwise you will NOT be able to use OKICHAR, sorry. Second, you need a set of four control codes to function as "arrow keys" to move your cursor up, down, right, and left within the box. The defaults are the C  P/M standard (^K, ^J, ^L, and ^H, respectively). If a different set would be more convenient for your machine, you may change these using DDT or SID. The addresses are 0103 (up), 0104 (down), 0105 (right), and 0106 (left). r machine, you may change ext TrackT Select TrackU Previous TrackX Exit from Superzap6F Exit to File List6K Select Block Current-Track Current-Sector 2Current-Block  # 7 NCPSDTUXFKA m F m  kM@ DPSI!*nx!*px!*rxUBLK Sector(C Change SectorP Previous Sector(F Select New FileB First Sector of File(S Select SectorE Last Sector of File(X Exit from Superzap File-Name Access $Current-Sector 5File-Offset d:filename.typ R/s ) 7NCPFBESX^ Nq:VN>:Vq>ɯ2;͚>PK  !6'!~<2_6> ͓:à1͚ PK 1.3 - E.Meyer - 07/84 :222"2'22%:*ڀ!~#::2UG>2V*}* ͌"S" " `!2k#2j#~+! x I MTnkDRMD:2/2!]^6  :(!!h2*| !R((*Ͱ!":u͎!6(Ͱ@:D 0^H Cursor left^L Cursor right^K Cursor up^J Cursor downS Select FileX Exit from S #2W#~=fÀ#2Y>2X#~fZw#:i<2iG#~,:iG=2W2X*j!YN# #Z:Vʅ͚[Bank :͓͚] *j͚: }ʸ͚ :l<2l:o=2o=Ù:W2n}t#:uperzap6C Change Drive6P Select physical sector  SXCP>Wqka** No records in file ** File not found PSMD:O'I*SY[YKf "l:\_SjK^ [YKY+Sh$!"n"p222!!l_}2o><2mt:V5:U`! "!" ͚ >2V>2o>2i2W2X2l2m2n.*SNwy#h:mʉ͚ =x2m:lʞ> ͓=Ï2l͚ >!p:oG~ ڻڽ>.͓#°͚< >2o:n#͚: p#26#~=€#͉?222:!u͎2!(Ͱ:P  :7=<2;ā2;,!,-!,-*:|N,>, Enter Hex Track Enter Hex Sector 2Enter Hex Block N Next SectorC Change SectorP Previous SectorS Select SectorD N24#~€>>23>25!<-"/͚Port :6Ͳ͚ -> Ͳ> ͓!"3>25!->"/5͚ ??}o|g_㯆#͓Ú0:ړÓͦͦ|Ͳ}Ͳ~ʀA_0Ҁ_#_  Ͱ :(Ϳ:* ! ^H Cursor left(^L Cursor right^K Cursor up(^J Cursor down^I Change Side(CR New Line^Q Cancel changes(^Z Save Changes  .DlLEFT: :=2: :/2bJTOGassembler, it takes only 1K of disk space. It allows you to examine or change the contents of any location in RAM. You can also read or send a byte to a hardware port. PK output will echo to the printer with the CP/M ^P toggle. Here is a briL:/2>2bJDOWN:2bJUPWD:2bJRGHT: :/2: :<2bJNWLN>2:p2bJCHND>2* 2+ QUIT>2* SFSN*"!!""}!:2[:2ZJu͎!S *))))""}- !""} !gef summary of PK syntax ("[]" = optional): A>pk or A>pk [b:]aaaa[+nn][=vv] or A>pk [b:]aaaa=vvvv.... or A>pk #pp[=vv] Use only valid hex digits 0-f, and specify ALL digits, even leadin!g*"} (Ͱ: *"\:(Ͱ*"""}!?!> 2!FRFS!"}""\?!LSFS\#*}+"\?!CHDR!(!>2u͎ NA!%(O'| Ͱ52<22 :_[:2\>2M:D(g 0's, or you will get a syntax error. The "b:" parameter in the above examples is used only on systems with banked memory; see NOTE below. Typing "PK" alone, with no arguments, invokes interactive mode. You will receive a prompt, ">PEnter Drive Name or press ESC ===>** No files on drive -:=?2; ::?2; ::?2; ::<2; ::STFL: Ͱ!n"Z:2\:&o))))[] 2hK ", following which you may enter any of the argument forms discussed below. Standard CP/M line editing is in effect. Enter ^C or a null line to exit. I. PEEK: Examine memory locations You can examine anything from a single byte to a  PK.DOC ------ Documentation for PK.COM Version 1.3 (c) 07/84 E.Meyer PK.COM is a handy PeeK and PoKe utility for CP/M. Written in 8080 full page (256 bytes) of memory. There are two different formats: (1) To examine a single byte: A>pk aaaa (2) To examine many bytes: A>pk aaaa+nn Examples: PK 003B shows the value at address 003B. PK 0600+4F shows all bytes   from 0600 to 064F. PK always displays the requested location(s) in hex and ASCII: A>pk 005d+07 PK 1.3 - 07/84 - E.Meyer 005D: 30 30 35 >005< 0060: 44 2B 30 37 20 74v:й3:CyŞ\u҇ k|(8WQM_L㴲?RQdjB7uѹٟWAX/D>.9vtWѝ L^E͏[S!{a?~!}p`-6vѷd/*,w1*.57us= 6馮2*i~B](+w;.Ka-Og?(,jAM4 >D+07 < Of course 005C is the address of CP/M's first FCB, so its contents were simply the argument we gave on the command line with PK. II. POKE: Change memory locations PK also allows you to poke desired values into memory. Thli(D-iHD=>jJ4PoZP矄5=}o˄Qgz+R=%Wܕn*W eлiS"AnQА-E]&jJѢ&)GROvGzjӰ}֠?eHIIm?"E*灦TrG6Ri!*T}VMZ/TGOt_eM4QTh; -Hm2z$'AvSAP40.ASMY  !"#$%&'()*+,-./0123456789:;<=>?@oX?nr#5]g|Gi"w/J~UDC%\bJPFI_S>+aMDOڅHjxPvni;E׊m6Ij8_/ZXOǟ^LwM=(*#mkڕkASy->[\z(Rš>Dm6I=zR=;zS[# eHIIm?"E*"A灦TrG6RABCDEFGHIJKLMNOPQRSTUVWX\h}B.PJׂL^>NH_ş^~zTe>`UYLv/djUʇōr_9`,N? k#76* ;L^DZw{=>Pqi=D僊٪)R/TGOt~M&e+5rZ [}RG~i5H/MQՏt;=H H|UHwPk[zٞU4R=QVv4 ڶJEAX /1vK˄|ZxmrDapꗈ?qa2aӬm-;wE浠HvDS4=DEpwTe1aM>NH r_ UFiUuf;j')ŎuwtWۘPĎn:( sL8!9T9Br_%UY,>NHuGUV;*BŞ;*B#3 ;)* >^ ka_sSsrrY~C`,RX QlB;j*:Xj|q覮2뾋}p_ k8-7=e\Daw@M*E;|v~e/l?q2a[%{}j"j._"Q.@iZГ?=HX kagšdj{Z׹'Ih—q5vUÌ7 # ֢aHhsBg i]  _x!bsЛ+D2y-IEt<k6Fc3ڕM!avP4ŏMQ#SN6Ftf83jw6=0Ҧ}<Jm>Ѯh *#Jׂ>.qۥ(Z&(m^ |面ԟ'tTDm" W̱2R\)zRЖKa-SCT^G3E)i{%ZX  0Viv) Y aRE>#0nL XLE>#0nL XBE># a 0Viv) Y aRE># a 0Viv) Y`/JKax,JKa]_JX ka-)m^ :핰Nx\gc![!F0c![!*.2kZ[aRvUÌPRiMڞԴP0L00TrzGv1|y-x,kj# S{aZ60`-\+aZ4!}Fō7FEm_ ìqn.>S?ڻBExUWp^X ka-*OI۫AX /Nm%F6^BX yˬA-4X3 Йhtja0%W@@-V%jAv65.0n᮶0쪆ώ0:e>QE>#7WjoڵjF8 gJhZD*wd0nLE># a ;aU 3f 臲JJZ!QCSҖSDY kGӬm # ֢X>&7_U7ΆKa]_kaʇ@*JQMO°x! Y7°50tz~S;Z$eHOV ¨2@Gj;%퓢3aZ}j0`-|^pHJV EjSF ڔ>ˬ}U°0noHz_4>/R%OBuB臲JJԦ)O}BVm¨2a0V #=&~KTP /] Їî(m^ :#]Ю(m^ :;|Fψ [!Fc͕|HmhA'kv!¸!}ojwԗUT f֠f>1Q;aZԝW>m6I=葒¨2a0V hHhs5ٸ e +#2Ei0kaS{7K8ͽJ(R2Z "JiIuB&U] f57(R}BڔBin61HmhA_50Viv).EW>TEO*mw#()W%Z60nLi&|x]3@G]/(R2ZPz~Si&q A%9EԦ°5xazP "R "E&Q;ڵ[OJ&]!PWPfJmyMQyMσ0Ҧs@WӓE;|gE~WQI[_'W¸ԮE!)J]\%eB Uw%F:~>?==&jVM͛%F1^3@?O M-ϝ0nL&Hq}]mmkԮEͬUB'ThnU?=AuB&U] f֠tyhs"')O}"Vi.LaMI()i^"E)FvGMHMm W>ʈEmZX kjZkaZ8a> :QCBt=PS0notEe$ۢAeHMKZ\FJX ka-'EjSF :=,DQTW6y.0|z̄Q3 # U_J>Np5q{#"3at°5qZ[!Fw2aZĀNoI4ma4yL)Rټ,(i[[lԫ0|\ {a-5kAg핰N6kg(vF1_na*i;a4{!]0w@8|.*imrGmOiZ0L00p5qZ0A& a!t *]T>䎒_4ka``Q5x!"0nL4ˬk*aRE># a0Viv) Fw(1FHG+ kKa> F+q%tWKst<(m^ :Pori]|FōXNԐn;]T.j%nbsoӂm6I=һM0nEca}/p%n}]һ)zHe"DmDC(,j*{J*w4$擰m%VU  fkдXDjh4$0|F @_6WS4m VP}BII-i0cUeԐ!6)RNѢЏj)R)a] mOiPf[h6FHMDEtӮ(m^ aZ9Ohs5E&Q0A&ۢAm_zSI۟>ܿZLZL&d0  0L0ȄaW5̸ # W.ƽÚ9wƾtv*a~Cg_uJ(M(RtvJGa Ҧ8|zSt<)R= mQԗ k!(JѢ&)Ga-r_-A rw@+EtMmOiP4m#5-i(D-kQW0k2JzBX kaMJm_ ޫ2J0lf ja 0\f \/|îjdz' Y`0ːz4LOp^X kaMeHM *#zE%lf 1o2Ei0ЮW%0 0쪆ȄaˬA0 f>*@oS,w=>Z5ä+dp50OJE>#5$+#]E%m.F0no0ymY>PnJa-56R~iQjH *!SH ]X^dHpqe Wp^X kaME蔴6y핰.9^gDvU#?2k|ڸFw2@OIQka-/Ѣ}jIv.z{6\x Y 7*i{RHy3+ Y 7(Rigݑ?B\^7tye.t_&({%ҮU@C%j! րl遆d|F70q%]\٥0lf ja 0|F0~XE>ÎAE># FuB&[äkavPs, Wp^X k&/KUltM?ЅnBrˬA-4X3 ЙhtjaU 3I&@g~G0|F @@vV%2? k_ 6Eҗ0Ҧم0nMH_pU0nLE>#0Ҧ¸ QuB&"BiSsavЄ([!R%O?=~5(0z #"A.ǩ;aUl<ˬs3a8WaR+&oFwZ3y-aIWX gq-¸3y eWQ4F7X dh.C&f2pg.>.2k\0\f }5*.a*.pM]N liMX#t5~˄]0иa0]2a w# _c-&oa2@*]Uモ\\>IWȄQ5satL\>MH_KԀ# VȄJKa_VȄJKa4{!FۯM,&oz[tvK5/q ˙0|\ {a-5y5-h.jE6R)*OI۫AX {cjDEm_ ìލ_|y5-zBEw\)zv]Q_ևm ]^¨2a F&]a-"Ƶ0r 4/τq[4rwSWi&JѦmҖ=M uy4PRқ_ʈjب~4Q"?엸Rt4F10\&4ZU-]0|z,aMXgcFZ +a 0n#&oIWX gq-¸U fu0|F3aEF0cFFZaZX kZOBQf푎ZlfGa0f gdcF^E>ÎA>šJN+#VmE>)ѶmMvDSLorIX 7KXpaR .omBQYI[j!bqe t\];(V mNQj7 -I # bmr衤THksڕ-I kaWl"Aix °5p.|&  0n]n*̈́Qw+dp5p.|& Yr_͟JKa8j> g1ۯaQ3Q3hkd(2k\0ni^4p^X k.w7ufKa8WQw+dp5p eW0Viv) YƝ0|F0~XE>#0z #k fWWa4y#f2a``JKa8j> cf¸-  t&⣰>ܿZX>imH-MҖ= <%mCf ka_x"F+ _#FϰcFc& ^gdc+a}/7_š.w7F0nogHm+a5D-O2JB0n7(oim|% M&m=x!oqb3a Lnj/֔ϊT;E*"5-HEQ ka{/Ga--a.FܟG+ kKa> F+q%tWKst<(m^ :Pori]|FōXNԐnZm>iH'ZJX kx%{y=~@%vTDeOI0]]+C)?Dj ɴDS&Ԕl0rx;a-쪐,%`-jJfP} u9Y.cz\fԏnm ^Օ>ܿZXSZ>+RvG]&z"Ee$obsDEm_ ìq#)>΅a8_$eH[Ki߽tMG_I[cG{7^hJX ka-xm =kAԗ MmN-]\Qr,1vKZԶ0xBC_//: jz*z&WT6kA0n񪮄š̔L4Ejq8 ڧ]q8 K(\(&4K3a.a>Nso0Gʇe pcg/0g7Ά%ÙqjniU%QعW8}5(\8}5]ӛq8 {a-5vDS4=DE-7Z4륰k%Qx%ÙK3xU,a+0Ga%Q8؋%ÙpgK3-aGW%QX ka-RSڼt<Zm>iH'ZJX kx%{y=~@%vTDeOI0]]+C)?Dj ɴDS&Ԕl0rx;a-쪐,  er commands. To do this, the argument should begin with a number sign "#" and the port number, "pp". (1) To read a hardware port: A>pk #pp (2) To send a value to it: A>pk #pp=vv Examples: PK #0D reads the byte from port 0D. PK #0C=E8 sends byte E8 to port 0C. The port and the value read "->" or sent "<-" will be displayed. -------- NOTE ON BANKED MEMORY (CP/M PLUS ONLY) -------- If you do not have banked memory (found in most implementations of CP/M 3.ere are three different formats for doing this. (1) To poke a single byte: A>pk aaaa=vv (2) To poke the same value into many bytes: A>pk aaaa+nn=vv (3) To poke a series of up to 16 different values: A>pk aaaa=vvv0), do not use the "b:" parameter. Furthermore, it may not work on your machine if its bank selection protocol is different from that of an Osborne Executive. Bank "n" must be enabled by sending a byte with bit "n-1" high to the bank control port: forv.... The offset and value series options conflict. If you specify both, as in PK 1800+2F=0D0A00, PK will ignore the offset specified. Examples: PK 309D=E5 pokes value E5 into address 309D. PK 4000+07=00 pokes value 00 into addresses 4000-4 example 01000000 for bank 7. The original configuration is restored on exit. The default bank is "1:", the TPA. Accessing other banks can be hazardous, as they contain the non-resident operating system, its data buffers, and various machine-sp007. PK 0006=43FB pokes 43 into 0006 and FB into 0007. PK then displays a peek of the addresses just poked. III. IN/OUT: Communicate with hardware port PK also allows you to talk to hardware ports using the IN and OUT assemblecific firmware (such as video RAM or boot ROM). Sometimes the same addresses may refer to different entities on reading and writing. If you use an address that doesn't exist in the specified bank, you will be operating on bank 0. Review your manual.  4N.COM Ver. 2.0 (c) Norman H. Strassner 2/20/84!9"1!~C^!~^@ !L"vHʍBʲhʍbʲ! 0 z!$ 0 ԧÔAҳ !. 010ùyy"x!L"v*v^#V#"v*t" ^J* ^#V#!)$*vs#r#"v ? |6{0 |_}h t0v7 ɷ*t|͈> }ڔ>0×>1 Ê> à---- DECIMAL ---- HEXIDECIMAL -------- BINARY ----- -- ASCII -- 㯆# t #~#~x@o&"tͪ> *t6 *tXH zB *t|i} Vci>^ }@  No Char. a{_Binary numbers contain only ones and zeroes String contains non-hexadecimal digit(s) Number must be less than 65> > _ d' @536. Error in input. type N alone for help using N.COM N.COM Ver 2.0 By Norman H. Strassner Accepts a decimal, hexadecimal or binary number, as well as ASCII characters, and displays its equivalence in all four forms. Append number with an H if hex, or B if binary. (no appendage required if entry is decimal number) Prefix ASCII control characters (^@ - ^Z) with a carrot "^" Prefix normal ASCII characters (SPACE - TILDE"~") with an "@" Examples: A> N 10 DECIMAL number, no appendage A> N 0A HEX number, append "H" A> N 00001010B BINARY number, append "B" A> N ^J CONTROL CHARACTER, use "^" All would yield the same result: ͪ 10 000AH 00000000 00001010B   @; n20.asm/n.com ; ; ; ;decimal/hexadecimal/binary number conversion program ;by norman h. strassner ;version 1.0 august 29, 1983 ;version 2.0 june 22, 1984 ; a terrible bug in the source code was found. ; some lines of source code must have inadvertently ; been deleted from the file. ; the result -- program did not work. ; this code is complete, and has one improvement ; - displays the ascii equivelent of ; - the number, if valid ascii character ; - exists ; ; instead of just fixing the code, i also ; added routines that would handle the inputing and displaying ; of ascii characters, making this program much more versitile ; ;contributed to the public domain for non-profit use ;as a small thanks to all hackers everywhere ;address comments to: norman h. strassner ; 1950 n. normandie ave. ; los angeles, ca 90027 ; (213-661-5000 voice) ; or ; compuserve ppn 72135,1051 ;this program accepts a decimal or hexadecimal or binary ;number !  from the cp/m command line and converts it to ;the two other forms of that number, and displays all three ;forms on the screen (presently set for 80 column display). ;entry can be in one of three forms: ;(from the command line) ; a>n ddddd ]Gp3".Gľ3ůZnL)LkGC7w鈣ӝX? &&E,?٢CPe/ r> ======> decimal entry ; a>n hhhhh ======> hex entry ; a>n bbbbbbbbbbbbbbbbb ======> binary entry ;where the d's are decimal digits, the h's are hexadecimal digits, ; and the b's are binary 1's or 0's. ;(notE,>}ſV_HA%Zq!8-Z0Aǂ+Ll8:[ 6ܠcؕ^[SދVbUq$`,bBѮCU n|!O#P0 qAK_u ~8U+}uB4hl 謠K'VGX0/1MG<{)*tU-hn,A{SMǸ6J4qr q%DAx{@U Ʈ="8ice the h and b appendages for hex and binary numbers) ;(decimal inputs are without any appendage) ;regardless of input, n.com will present the following two line display: ;---- decimal ---- hexidecimal -------- binary ----- -- ascii -- ; LYJ [ j Ee!jAoƖX0/qn&c\mb%:4ؙP>\6vC\c/8"bgAIʡø13i>εxC4:SjcTMQ`mʽC-Z#SZBuXPu3'6!X^qNwƖ^/(\@cRHh06/ۧ#O<v";.8M xxxxx xxxxh xxxxxxxx xxxxxxxxb character ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  xxxxh xxxxxxxx xxxxxxxxb character ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C}/8[osbH>\68 hw@SJ;S8#qdn,7ujxu% [bh+T8RzpT-7NwUmڡnK94E".jkZXU1n+bü07O#J16ǂޢn"q 'bFU-3[yCLdDKvOXJ;SXvgN20.ASMa  !"#$%&'()*+,-./0123456789:;<=>?@ABCDoO˟J'oܠXOǗDoco>XC-ZPՂ,тľ3UhPՂ,тܘRbߙK*4[dzF 5糀NvGS>T`Ɩ8F3-AnZn}D;tc qw@o hW{D3-AGZFnՠ}|Q\KPՂWORbߙ"   "rK}g ?}D|&#q\/57cFX&&rDLYРU {xr'11q$$-Tgk&#Tgk#U@uѸt*}ĹVߥ3 z^ Ƶ&VQ9 }CuveBA ^¹vm:4Z 11,pݎzd{(} =+ȓd4evƢ1LSmgQg ڡ& BvƢBL . 9 r(%<ˠoi5Qu'U:]1qc-ZopBB,D)Ѹq-jTgk &,ɯ Dd=Y>:\X41DZLQ`-7XRB ׻FUն˖d [Ȕ%rco1՞8ͱ-78#j<C (mBz㌘x 5\Cv5Qp)0(?'$O`d%̒>OCv5ILySH-@b4Ĉ]MaԼێVr;hbX,o!oAbFu%1,rb~j&fA I@&BPlnBp^@tR!¨yt͝ ÍAa\mb%cuƖİXB,!HPđx^7C7nvƢ16Wmu&Tgk &$ ;o* }ĸ6J41dWS5n Vr8Vq!Đ]Mal1vUj'pAL Y_ADa\mb%~ 3Dc9xDG D;tcс~ _j[~ h_1f3b޽Uն˖x5-:[11LSmgQg tVi0=|@`Ү6{/p ݾ.m'3b~(o/m'&j :S0( >8_l]M%48.+bH)V3hGyB ׯ`Vgj(Í1f_dO i?xF ׯ`4/ю<ˠoi5t߉Rbߙ Uc\K?t[kMD'|폷o*ͪ 5\by yDQFX Vrh! Ƶ&V1vUqK}g b^@$@r iAUo16F{P5ƵωW]VNP႘[ț~ #I^r틊82eڡ->8p%2P9 bl]MQPN zE 6 1c79%Bw/zS7Đ]Maܵ_'}J Qݤ[hUnN?s 1q$Qݤ[bX,ojQ0][H@ԅ11LwW0"(Kn-@ӂVpU!e 2Y{(p]9 1\RvD7hB;tcĐY}L MYJ<XjFX&&>tsE rw|$()# 1ohn,ЍEc\mb%:l]M'pAL Iz @4w*T rqmhbȮ0jF>_eDsB尖eƅCv5UB Vģ*OtȳTgk &,ɯ +T 1f8rĊ< 2evƢ:r "h}lP9AvƢa2eNQPN j C!I[Hz $Y/ΉztlL'=1q:ۋtwO0][ț1\/zHGy{qgnfݟa@4w*Th+İXB,!ͳ b擊&)|܎<4;+0&NGy{qg'bX,o!krbXNala2eNݳe2'bH,l-E#  h%Ub-bۍӝQYbXN!o^CgKbFY}L< z͵ K}g σ7XEC^{{'n/oϷ1$+__Ϛ-{ul ĐYi=J``C6Xfd_!B ~@yD%1QG!&ڡ(o *2&Tgk &鮅 6҉U*bH+HVrhFa\mb%d @̽WİXB,۷Y:1Ο#] e>ISbXN!ofgĐY[țd #3M'NGy\OĐY=WĻe>I1y_L^CaZdlz{ELȿV4T'bH)?CCOo1>C[퉉WU.Tgk &42 bHV0[ykЍEU[t8%I5[b^^m 5\CgL(ByccKTK! FİXB,<<c1LwW0[ʡޢ2B_OF0)-@b4ε+Xv @^TKGXgTgk &$O`D m.tĐ $(OP႘1\^b) TváF>RU:z\r*C6} ͝ C+7 .xEoanb!MaL aE1$+Mx:Xˍ)%)>7fK ׋V+r.!ͳ &bvC7 Um,'fK ׋V+bm 5\CgL1$+UZ;ޢA=ATǹMi=I\̚mg͖=Wċj>CgL1$+힤h|d#(mBgM63bHV0X*RbߙZnL)LD]tw#b&nDü4JpU_0"~Ci iVV{b[ub)LblpGI.Tgk ~=/+ ^PEǮ<C !~=)-^g;{/:xgQCv5y<'N4OP<1LwWu If=1dWSX5[bHVp^by y3"eCF $U\#U>x 1,71f1BN[hn,5idψ!Y|@0)Ƶ&VC3kҶɞC%> s U@<{SESqƍ]x2kҶɞ53bHV0s%ڡj4G7XMN }|2kҶɞCbKsyZJ}RbߙЍE5idψ!Yײ7OcgvƵ&V~O|߯`lv _~=kҶɞCYeo:ݙI:b\gKb=_CaD m'&K9.#J NK9JILNPd#({AU ڡ&fD ieVQü0GQ 1Ft5ڡ&&J9qcZPH9,1[XΖQYK94X JTk đX o8>*Ap,X0/QJbd:Aumb%:I>~%{gĐ`U5idψ!Y1ݼp5idψ!Yfo*. ЍE7h\li2kҶɞC,;xI /ڡnbK|=z=kҶɞC,;^~9ߞoWxtЍE7hs%^5idψ!YfKJ}0m!z֤m=kgĐ`>((QՂtZPӬI&{ bד;({Q **Cۦж)1mJ mCg$ *}戵`^C졟Ge]#> sZnGb>ip^?xELTgk |71ηpK!%ߠu j=Kbȓ)̶3b^#d:[1f| Z|mq7e# :I::Au bH,tI m'&εU\{5;tC7$  \rj.aDq!Fcl>C6eNAε+Xby y3 cbH,UN ) gĐY[țx՟:[11,njDc*Qī 5\CgD+TcSXtO z2~rs/hlvƢaq;mgpa ^tl Я'#'wQ0Ɩhn,Sțx8Au bHtBanbhЍE2YTgk &dO&nߞ:[11$x Ńb];ޢ2Bl]M'pAL DAm0v]glZ>>07!&d#((?' 5\C2, 5\C2P&)|܎<4;+0&NGy{qg'bX,o!krbXNala2eNݳe2'bH,l-E,tI ~ri iAS8*C"1\/zXOVhtTfY anʌ*szCW'pAL )KbH,tI IŠWpaV (,q6Uϖ"ߟ:[11y_L^CĤJ^1$+#t:1$+H&{lQ'! To use bank selection, you may have to patch one of two values into PK.COM with SID. First, your machine's bank control port number is required at location 0103. The default is 00, for an Osborne Executive. Second, if PK does not run properly yDp|ĠLݠP9 I8Au bڏ2 _kQhRKQ9 bjs! 1794DC7F9M y(tVA06M  ;o*Vn1\G@%(2s8M +HEY!42HIK9b\mb%=LDƖX:4֩Z4q4*A[4[HIٳTgk &&m!ͳ %1,n73b(6with the default of 0000 at location 0104-5, you must install an address in your resident BIOS where PK can temporarily put 26 bytes of code. This can be either an unused BIOS patch area, or if necessary a location in some routine that PK will NOT tryޢJ4t !N'pA z2@̽Jt ~=AB z21,n6wr RHp3Xyga 7Cg r G:b="-A9-_CaE m'&nJlXJ;S`%^}ʪTgk &Ή!-1$wpCr;8^~!BL)3.k ^yg to call (for example, disk i/o). The original code will be restored. PK has to use an odd trick to switch banks in order to avoid losing itself, since switching banks disables bank 1, which is where PK is running. The BDOS, though, is usuallynZn0v^t}ʪTgk &Ή!;8nGĐvCr[Hlnʌ !&nc8co>b%^Mw|U'pAL C2ĐGbH1$wp;;x;8 <};x{;8>H n?#>n_'ޝ|J #1$w޿#BL|~ 5\C2[ visible under any bank selection, as is a small amount of RAM just below it. PK has to put a small piece of itself (26 bytes) up in this common memory, so that it won't get wiped out by the bank switch. If you have not patched in an address to use (%  at 0104-5) as described above, PK will calculate an address just under the start of the BDOS (plus RSXes if active), and hope that this location will be high enough. This will, for example, work on my Executive unless there are more than two pages of Rd self explanatory. Jim Wack FOG Utility Librarian  file. The program is menu-driven anabs, Wordstar dot commands, stray printer codes and other possible "garbage" in any text file. The program is menu-driven anSXs in memory. If the address you have at 0104-5 does not work, PK will crash when some banks (particularly 0) are accessed. s in memory. If the address you have at 0104-5 does not work, PK will crash when some banks (particularly 0) are accessed. FILTER4 is an updated version of a file filter utility written by Claude Ostyn. You may selectively delete printer codes, tabs, Wordstar dot commands, stray printer codes and other possible "garbage" in any text file. The program is menu-driven an&  imal code for the non-printing character. FILTER4: is an updated version of a file filter utility written by Claude Ostyn. You may selectively delete printer codes, tabs, Wordstar dot commands, stray printer codes and other possible "garbage" in any text file. The program is menu-driven and self explanatory. LBL1ACRS.BAS & LBL3ACRS.BAS: These are two short programs for printing multiple copies of labels with a single address, you specify the number wanted by responding to prom First Osborne Group (FOG) -FOG/UTL#057 Copyright 1984 by First Osborne Group (FOG) to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distributipts. LBL1ACRS: Set up for tractor fed labels 3 1/2" x 15/16". LBL3ACRS: Set up for friction fed 8 1/2" x 11" sheets of 2 7/8" x 1" labels 33 to a sheet, these are the sheets that are normally used with photocopy machines. N20.COM: A decon for profit or personal gain is strictly forbidden. For information, contact FOG, P.O. Box 3474, Daly City, CA 94015. ********** CV20: is an update of CV on FOG/UTL.010. It is used to compare two files by alternately displayinimal/hexadecimal/binary number conversion program by Norman h. Strassner. This program accepts a decimal or hexadecimal or binary number from the CP/M command line and converts it to the two other forms of that number, and displays all three forms g them on the CRT. CV20 is designed for comparing ASCII files. However, files that include control characters may also be compared because non-printing control characters are displayed in the form of "[xx]" in which xx is the hexadec on the screen (presently set for 80 column display). OKICHAR.COM: A utility for designing special character sets for the Okidata 92/93 printers. OKICHAR lets you design each character conveniently on screen, and builds up a disk file containing '  all the character definitions. This file can then simply be PIPed to your printer to install the characters. PK.COM: A handy PeeK and PoKe utility for CP/M. It allows you to examine or change the contents of any location in RAM. You can alsoezed using UNSQUEEZE utilities found on FOG/UTL.003, 004, 014, and 031. First Osborne Group Utility Disk Library Prepared by Jim Wack, November 1984  031. First Osborne Group U read or send a byte to a hardware port. REFORMAT.BAS: Is an Mbasic program to reformat delimited disk data files more to your liking. It is assumed that Records are separated by a CR/LF combination, and fields within each record are delimited by commas and there are the same number of fields in each record. SAP40: This CP/M utility reads the disk directory tracks, sorts the entries alphabetically and then rewrites them them back to the disk. All unused or erased areas on the directory tracks are reformatted with continuous 'E5' characters. This completely removes previous file names from the directory which have been deactivated. All files of zero length are deleted with the with the exception of files beginning with "-". This supports labeling disks for the catalog program MCAT. The program works with CP/M 1.4 and CP/M 2.2 but does not work with CP/M 3.0 or M/PM. ********** AQM files are squeezed assembly language files. They may be unsque