IMD 1.16: 1/06/2007 13:43:52 FOGCPM.212 --FOGCPM212DBFRONT CMDw LTRIM CMDMAILLBL CMD&MAILLBL DBFMUSIC CMD !"#$%&'(MUSIC CMD)*+,-12-31 89 -CPM212 DOCMUSIC DBF-./0123456789:;<MUSIC DBF<=>?@ABCDMUSIC DOCEFGHIJKLMNOPQRSTMUSIC DOCUVWXYZ[\]^_`abcdMUSIC DOCeBOX DOC#fghijBOX INFkBOX-CPM COMlmnopqrstuvwxyz{BOX-CPM COM|NOTATE ASM}~NOTATE COMSETPR ASMSETPR ASMSETPR ASMSETPR COMSETPR DOC* "DBGMINIT.cmd KRP 7/1/84" ************************************* SET escape OFF SET talk OFF STORE t TO start DO WHILE start STORE '99,99,99' TO begin ERASE @ 10,1 SAY "Enter todays date" GET begin PICTURE "99/99/99" READ IF $(begin,1,2)< '01' .OR. $(begin,1,2)> '12' .OR. $(begin,4,2)< '01' .OR. ; $(begin,4,2)> '31' .OR. $(begin,7,2)< '00' .OR. $(begin,7,1)> '99' @ 12,1 SAY "Year must 1-99, Month 1-12, Day 1-31" WAIT ELSE SET DATE TO &begin STORE f TO start ENDIF $(begin,1,2)< '01' .OR. $(begin,1,2)> ' 1 ENDDO WHILE start RELEASE begin,start STORE 'B' TO drive STORE t TO ever DO WHILE ever USE STORE ' ' TO usefile SET DEFAULT TO &drive ERASE RESET ? "The following files are on drive: &drive" DISPLAY files ? "Enter the file you want to use include .dbf" ACCEPT 'Carriage return to change drives.' TO usefile IF usefile= ' ' STORE f TO more ACCEPT "Enter new drive letter" TO drive STORE !(drive) TO drive ELSE IF FILE( '&usefile' ) USE &usefile GOTO BOTTOM STORE str(#,5) TO lastrec RESET STORE t TO more STORE "#>0" TO qualifier STORE "NONE" TO indexpr ELSE STORE f TO more ENDIF FILE( '&usefile' )= 'T' ENDIF usefile= ' ' DO WHILE more set default to &drive USE &usefile GOTO BOTTOM STORE str(#,5) TO lastrec IF indexpr# 'NONE' USE &usefile INDEX &INDEX ENDIF indext= 'Y' ERASE ? "The default drive is &drive" ? 'The File you are using is &usefile' ? 'Index = &indexpr' ? "Qualifier =" ,qualifier ? "This file has &lastrec records." ? ? " A. Add new data to file." ? " E. Edit data in file." ? " C. enter a dbase Command." ? " Q. Quit using dbase." ? " U. Use another database." ? " R. Run programs available on disk." ? " S. Search database & change qualifier." ? " D. Display records or mailing labels." ? " I. Index the data base." ? ACCEPT "Enter your choice" TO choice DO CASE CASE !(choice)= 'A' DO WHILE !(CHOICE)='A' ERASE ? "Do you want information from previous record" ? "carryed over for entry of current record?" ? "i.e. 'Name' from record 1 shows in 'name' field" ACCEPT "while entering record 2. (Y)es (N)o." TO yescarry IF !(yescarry)= 'Y' SET carry ON ENDIF !(yescarry)= 'Y' ERASE ? "Carriage return in first field to quit entrys." WAIT APPEND ERASE GOTO BOTTOM store # to place STORE 'R' to choice DO WHILE !(choice)='R' .or. !(choice)='B' ACCEPT "(R)eview,(B)rowse <-type of edit,(A)dd,e(X)it " to choice If !(choice)='R' goto place SKIP -10 store # to place display next 11 endif IF !(choice)='B' ? "Hold key down and push 'W' to end." wait Browse ENDIF ENDDO WHILE !(choice)='R' SET carry OFF ENDDO RELEASE place CASE !(choice)= 'E' ERASE ? "To end editing current record:" ? "Hold key down and press 'W' key." ? "To end all editing:" ? "carriage return at 'ENTER RECORD #:'" WAIT EDIT CASE !(choice)= 'C' STORE 'a' TO command DO WHILE command# ' ' ? "You are now entering the realm of dbaseII." ACCEPT "Enter command" TO command IF command# ' ' &command ENDIF command# ' ' ENDDO WHILE command# ' ' CASE !(choice)= 'Q' STORE f TO more STORE f TO ever QUIT CASE !(choice)= 'U' STORE f TO more CASE !(choice)= 'R' SAVE TO temp ERASE ? "The drive you are using is drive &drive" ? "The file you are using is &usefile." ? "Index = &indexpr" ? ? "The programs available on this disk are:" LIST files LIKE *.cmd ? ? "What program do you want to run" ACCEPT "include '.cmd'" TO program IF FILE( '&program' ) DO &program ELSE ? ? "Program not found."  WAIT ENDIF FILE( '&program' )= 'T' RELEASE ALL RESTORE FROM temp **************************************************************************** CASE !(choice)= 'S' * find.cmd krp 08/22/83 STORE 'Y' TO morefind DO WHILE !(morefind)= 'Y' STORE ' ' TO clause2,clause3,clause4,clause5,conect STORE ' ' TO low1,low2,low3,low4,low5,high1,high2,high3,high4,high5 STORE ' ' TO FIELD1,FIELD2,FIELD3,FIELD4,FIELD5,QUALTEST ERASE DISPLAY STRUCTURE STORE 1 TO clause DO WHILE clause<6 .AND. LEN(QUALTEST)<100 IF clause>1 STORE ".and." TO conect ENDIF clause>1 STORE str(clause,1) TO numo ACCEPT "Enter field &numo to be searched" TO fieldchs IF fieldchs# ' ' IF type(&fieldchs)= 'N' ACCEPT "Enter lower limit of search" TO low&numo ACCEPT "Enter upper limit of search" TO high&numo STORE " &conect &fieldchs>=&low&numo .and. &fieldchs<=&high&numo" TO ; clause&numo ELSE IF type(&fieldchs)= 'C' ACCEPT "Do you want to do a substring search? (Y)es (N)o" TO yesno IF !(yesno)= 'Y' ACCEPT "Enter substring" TO low&numo STORE !(low&numo) TO low&numo STORE ' ' TO high&numo STORE " &conect '&low&numo'$!(&fieldchs)" TO clause&numo ELSE ACCEPT "Enter lower limit of search" TO low&numo ACCEPT "Enter upper limit of search" TO high&numo STORE !(low&numo) TO low&numo STORE !(high&numo) TO high&numo STORE " &conect !(&fieldchs)>='&low&numo'"+; " .AND. !(&fieldchs)<='&high&numo' " TO clause&numo ENDIF !(yesno)= 'Y' ELSE STORE " " TO high&numo ACCEPT "Is value to be (T)rue or (F)alse" TO low&numo IF !(low&numo)= 'T' STORE " &conect &fieldchs" TO clause&numo ELSE STORE " &conect .not. &fieldchs " TO clause&numo ENDIF !(lowlimit)= 'T'  ENDIF type(&fieldchs)= 'C' ENDIF type(&fieldchs)= 'N' STORE $(CLAUSE&NUMO,LEN(CONECT)+2,LEN(CLAUSE&NUMO)) TO TESTQUAL IF test(&testQUAL)=1 STORE clause + 1 TO clause STORE fieldchs TO FIELD&numo STORE QUALTEST+CLAUSE&NUMO TO QUALTEST ELSE STORE ' ' TO high&numo,low&numo,clause&numo ENDIF test(&testclause)=1 ELSE STORE 6 TO clause ENDIF fieldchs= ' ' ENDDO WHILE clause<6 IF FIELD1# ' ' STORE QUALTEST TO qualifier ? ACCEPT "Do you want to (L)ist or (C)ount" TO typechs STORE "9X3l1" TO totfield DO WHILE totfield= '9X3l1' ACCEPT "Enter field to be totaled or return" TO totfield IF totfield# ' ' IF type(&totfield)= 'L' .OR. test(type(&totfield))=0 STORE '9X3l1' TO totfield ENDIF type(&totfield)# 'N' .AND. type(&totfiel ENDIF totfield# ' ' ENDDO WHILE totfield= '9X3l1' ACCEPT "Enter title if wanted" TO memotitl ACCEPT "Do you want hard copy (Y)es (N)o" TO yesprint IF !(yesprint)= 'Y' ? "Set up printer (carriage return when done)" WAIT SET PRINT ON ? chr(15) ENDIF !(yesprint)= 'Y' ERASE ? ? "Database is &usefile , it has &lastrec records." ? "Index = &indexpr" ? "Date of report is " ,DATE() ? memotitl ? "Field=" ,!(FIELD1), " Low=" ,low1, " High=" ,high1 ? "Qualifier 1 =" ,!(FIELD2), " Low=" ,low2, " High=" ,high2 ? "Qualifier 2 =" ,!(FIELD3), "Low=" ,low3, "High=" ,high3 ? "Qualifier 3 =" ,!(FIELD4), "Low=" ,low4, "High=" ,high4 ? "Qualifier 4 =" ,!(FIELD5), "Low=" ,low5, "High=" ,high5 ? "Field Totaled=" ,!(totfield) @ 15,1 SAY "Is the above request correct (Y)es (N)o ?" SET console OFF SET PRINT OFF WAIT TO getit IF !(yesprint)= 'Y' SET PRINT ON ENDIF !(yesprint)= 'Y' SET console ON IF !(getit)= 'Y' IF totfield> ' ' @ 20,1 SAY "Field is now being totaled. " IF type(&totfield)= 'N' SUM &totfield TO fldtaly FOR &qualifier ELSE SUM val(&totfield) TO fldtaly FOR &qualifier ENDIF type(&totfield)= 'N' ?? "Total=" ,fldtaly ENDIF totfield> ' ' @ 20,1 SAY "Request is being processed" IF !(typechs)= "L" ? "Listing for above qualifications:" IF !(yesprint)= 'Y' LIST FOR &qualifier ? ELSE DISPLAY ALL FOR &qualifier ENDIF !(yesprint)= 'Y' ELSE COUNT FOR &qualifier TO tally ? "Count=" ,tally ? ENDIF !(typechs)= "L" ENDIF !(getit)= 'Y' ENDIF FIELD1# ' ' SET PRINT OFF ? ACCEPT "More ? (Y/N)" TO morefind RELEASE tally,gofind,fieldcls,qualcls,lowlimit,uprlimit,totfield,conect RELEASE FIELD1,low1,high1,clause1,FIELD2,low2,high2,clause2,NUMO,YESPRINT  RELEASE FIELD3,low3,high3,clause3,FIELD4,low4,high4,clause4,MEMOTITL RELEASE FIELD5,low5,high5,clause5,QUALTEST,FIELDCHS,YESNO,TESTQUAL,FLDTALLY ENDDO WHILE morefind RELEASE morefind,clause,typechs,getit,testclause **************************************************************************** CASE !(choice)= 'D' * show.cmd krp 083083, all purpose display program ERASE ACCEPT "(R)eport or (M)ail label? " TO typeshow ACCEPT "Do you want hard copy (Y)es (N)o ? " TO printr ? qualifier ACCEPT "Do you want to use the above qualifier(Y/N)" TO yesqual IF !(yesqual)# 'Y' STORE '#>0' TO qualifier ENDIF !(yesqual)# 'Y' STORE ' ' TO line1,line2,line3,line4,line5,line6 STORE 1 TO line DISPLAY STRUCTURE DO WHILE line<7 STORE str(line,1) TO linert STORE 1 TO coter DO WHILE coter<10 STORE str(coter,1) TO conter ACCEPT "Enter field &conter , line &linert, to change line." TO fieldacc IF fieldacc= ' ' STORE 10 TO coter ELSE IF test(type(&fieldacc))=1 IF type(&fieldacc)= 'C' .AND. !(typeshow)= 'M' STORE "Trim(&fieldacc)" TO fieldacc ENDIF type(&fieldacc)= 'C' .AND. !(typeshow)= IF conter= '1' STORE fieldacc TO line&linert ELSE STORE line&linert+ ',' +fieldacc TO line&linert ENDIF conter= '1' STORE coter+1 TO coter ENDIF test(type(&testclause))=1 ENDIF fieldacc= ' ' ENDDO WHILE coter<10 IF fieldacc= ' ' .AND. conter= '1' STORE 8 TO line ENDIF fieldacc= ' ' .AND. conter= '1' STORE line+1 TO line ENDDO WHILE line<7 STORE t TO nogood DO WHILE nogood IF !(printr)= 'Y' ? "Please load labels or paper at this time." ? "Labels are standard 1 inch high by 1 across." WAIT SET PRINT ON ?? chr(15) ENDIF !(printr)= 'Y' ? line1 ? line2 ? line3 ? line4 ? line5  ? line6 GOTO TOP ? &line1 ? &line2 ? &line3 ? &line4 ? &line5 ? &line6 SET PRINT OFF ? "Check the above example to be certain of" ? "proper label alignment on your printer." ? "and/or that these are the proper fields" ACCEPT "and order. Answer (Y)es (N)o. " TO answer IF !(answer)= 'N' ? "Realign print labels if necessary." ? "If it looks really botched on the screen or" ? "printer you may want to kill the request." ACCEPT "Do you want to stop entire request (Y)es (N)o. " TO ans2 IF !(ans2)= 'Y' STORE f TO nogood STORE f TO dispshow ENDIF !(ans2)= 'Y' ELSE STORE f TO nogood STORE t TO dispshow ENDIF !(answer)= 'N' ENDDO WHILE nogood IF !(printr)= 'Y' SET PRINT ON ENDIF !(printr)= 'Y' DO WHILE .not. eof .AND. dispshow IF &qualifier IF line1# ' ' .OR. !(typeshow)= 'M' ? &line1 ENDIF line1# ' ' .OR. !(typeshow)= 'M' IF line2# ' ' .OR. !(typeshow)= 'M' ? &line2 ENDIF line2# ' ' .OR. !(typeshow)= 'M' IF line3# ' ' .OR. !(typeshow)= 'M' ? &line3 ENDIF line3# ' ' .OR. !(typeshow)= 'M' IF line4# ' ' .OR. !(typeshow)= 'M' ? &line4 ENDIF line4# ' ' .OR. !(typeshow)= 'M' IF line5# ' ' .OR. !(typeshow)= 'M' ? &line5 ENDIF line5# ' ' .OR. !(typeshow)= 'M' IF line6# ' ' .OR. !(typeshow)= 'M' ? &line6 ENDIF line6# ' ' .OR. !(typeshow)= 'M' SKIP ELSE SKIP ENDIF &bigqual ENDDO WHILE .not. eof .AND. dispshow ? SET PRINT OFF WAIT RELEASE line1,line2,line3,line4,line5,line6,YESQUAL RELEASE typeshow,fieldacc,coter,conter,line,linert RELEASE printr,dispshow,dofind,ans2,answer,nogood **************************************************************************** CASE !(choice)= 'I' * index.cmd krp 10/24/83 STORE ' ' TO clause2,clause3,clause4,clause5,conect ACCEPT "Do you want to use a previously created index (Y/N)" TO yesindex IF !(yesindex)# 'Y' ERASE DISPLAY STRUCTURE STORE 1 TO clause DO WHILE clause<6 IF clause>1 STORE "+" TO conect ENDIF clause>1 STORE str(clause,1) TO numo ACCEPT "Enter field &numo to be indexed on" TO fieldchs IF fieldchs# ' ' IF test(type(&fieldchs))=1 IF type(&fieldchs)= 'N' STORE " &conect str(&fieldchs,20,10) " TO clause&numo store clause+1 to clause endif IF type(&fieldchs)= 'C' STORE " &conect !(&fieldchs) " TO clause&numo store clause+1 to clause endif ENDIF ELSE STORE 6 TO clause ENDIF fieldchs= ' ' ENDDO WHILE clause<6 IF clause1# ' ' STORE 'Y' TO indext STORE "&clause1 &clause2 &clause3 &clause4 &clause5" TO indexpr INDEX ON &clause1 &clause2 &clause3 &clause4 &clause5 TO a:indexer STORE "a:indexer" TO INDEX ENDIF clause1# ' ' RELEASE tally,gofind,fieldcls,qualcls,lowlimit,uprlimit,totfield,conect RELEASE FIELD1,low1,high1,clause1,FIELD2,low2,high2,clause2 RELEASE FIELD3,low3,high3,clause3,FIELD4,low4,high4,clause4 RELEASE FIELD5,low5,high5,clause5 RELEASE morefind ELSE ACCEPT "Enter index to use" TO indexpr IF FILE( "&indexpr" ) STORE indexpr TO INDEX ELSE STORE "NONE" TO indexpr ENDIF FILE( "&indexpr" ) RELEASE yesindex ENDIF !(yesindex)# 'Y' **************************************************************************** ENDCASE ENDDO WHILE more ENDDO WHILE ever SET talk ON SET escape ON RELEASE ever,more *************************** ENDCASE ENDDO WHILE more ENDDO WHILE ever SET talk ON SET escape* [dBASE CODE: LTRIM] * START AT THE FIRST CHARACTER OF THE STRING &FIRSTCHAR * MOVE PAST BLANK CHARACTERS DO WHILE &ISBLANK &NEXTCHAR ENDDO * GET THE REST OF THE STRING STORE $(STRING,CPOINTER) TO NEWSTRING RETURN * * * MAILLBL.CMD Label Printing Command File * * by Micheal R. Abram 11/20/81, rev. 07/11/82 * revised by W. H. Pearre 6/22/1985 * * From October, 1982 Lifelines * * * This dBASE II command file will print labels several across * the page. It expects a .DBF file in USE positioned at the first * record to print, and will print to the end of the file. The * fields expected are: * Field Type Comment * Name C Name-flipping a la NAD. "Abram,Micheal R." * Last name, asterisk, first name. This * allows you to sort or index on Name. * Option C Use for second name, affiliation, or * comment: If the first column is blank, * the line will not be printed and the next * lines will move up. * Addr2 C Street Address * City C The length of City, State, and Zip may * State C not total more than five less than the * Zip C horizontal spacing between labels, or * City will be truncated. * The horizontal increment specified must be at least one more * than the lenght of the longest field, or truncation will occure. * * SAVE TO LABELPRT SET TALK OFF SET EXACT OFF ERASE STORE ' ' TO Blanks STORE 1 TO Perrec STORE 1 TO Nwide STORE 35 TO Hinc STORE 6 TO Vinc @ 9,10 SAY ' labelprint.cmd -- Label printing Command File' @ 10,10 SAY ' How many labels for each name? ' GET Perrec PICT '99' @ 11,10 SAY ' How many labels across the form? ' GET Nwide PICT '9' @ 12,10 SAY ' What is the horizontal spacing in columns? ' GET Hinc PICT '99' @ 13,10 SAY ' What is the vertical spacing in lines? ' GET Vinc PICT '9' READ STORE Hinc-1 TO Maxname STORE Hinc-1 TO Maxoption STORE Hinc-1 TO Maxaddr2 STORE Hinc-(LEN(State)+LEN(Zip)+5) TO Maxcity STORE 'Y' TO Offer DO WHILE !(Offer) = 'Y' @ 20,10 SAY 'Print a line of dummy labels? (Y or N)' GET Offer READ IF !(Offer) = 'Y' SET CONSOLE OFF SET PRINT ON STORE Nwide TO N DO WHILE N > 0 ?? ' Name'+$(Blanks,1,Hinc-6) STORE N-1 TO N ENDDO ? ? ? STORE Nwide TO N DO WHILE N > 0 ?? ' City'+$(Blanks,1,Hinc-6) STORE N-1 TO N ENDDO STORE Vinc-4 TO N DO WHILE N > 0 ? STORE N-1 TO N ENDDO SET PRINT OFF SET CONSOLE ON ENDIF ENDDO * * labelprt.cmd STORE 0 TO Reccount STORE 0 TO Lpr DO WHILE .NOT. EOF STORE ' ' TO Mline1 STORE ' ' TO Mline2 STORE ' ' TO Mline3 STORE ' ' TO Mline4 STORE 0 TO N DO WHILE N < Nwide DO CASE CASE EOF STORE Nwide TO N CASE Lpr < Perrec STORE LEN(Mline1) TO Length IF ',' $ Name STORE Mline1; +$(TRIM($(Name,@(',',Name)+1,Hinc)); +' '+$(Name,1,@(',',Name)-1),1,Maxname); TO Mline1 ELSE STORE Mline1+$(Name,1,Maxname) TO Mline1 ENDIF STORE Mline1+$(Blanks,1,Hinc-(LEN(Mline1)-Length)); TO Mline1 IF Option = ' ' STORE 'Mline2' TO Maddr2 STORE 'Mline3' TO Mcity STORE Mline4+$(Blanks,1,Hinc) TO Mline4 ELSE STORE LEN(Mline2) TO Length STORE Mline2+$(Option,1,Maxoption) TO Mline2 STORE Mline2+$(Blanks,1,; Hinc-(LEN(Mline2)-Length)) TO Mline2 STORE 'Mline3' TO Maddr2 STORE 'Mline4' TO Mcity ENDIF STORE LEN(&Maddr2) TO Length STORE &Maddr2+$(Addr2,1,Maxaddr2) TO &Maddr2 STORE &Maddr2+$(Blanks,1,Hinc-(LEN(&Maddr2)-Length)); TO &Maddr2 STORE LEN(&Mcity) TO Length STORE &Mcity+TRIM($(City,1,Maxcity))+', '+State+' '; +Zip TO &Mcity STORE &Mcity+$(Blanks,1,Hinc-(LEN(&Mcity)-Length)); TO &Mcity STORE N+1 TO N STORE Lpr+1 TO Lpr OTHERWISE SKIP STORE Reccount+1 TO Reccount STORE 0 TO Lpr ENDCASE ENDDO SET CONSOLE OFF SET PRINT ON ? Mline1 ? Mline2 ? Mline3 ? Mline4 STORE Vinc-4 TO N DO WHILE N > 0 ? STORE N-1 TO N ENDDO SET PRINT OFF SET CONSOLE ON ENDDO @ 14,10 SAY 'There were ' @ 14,22 SAY Reccount USING '99999' @ 14,28 SAY 'records processed ' @ 15,10 SAY ' and ' @ 15,22 SAY Reccount*Perrec USING '99999' @ 15,28 SAY ' labels printed. ' RESTORE FROM LABELPRT DELETE FILE LABELPRT.MEM RETURN UUNAMEC|OPTIONC|ADDR2C"/|CITYCQ|STATECh|ZIPCj| UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU************ MUSIC .CMD **** Version 1.7 **** 04/09/1984 *********** * * * Author......: James A. Gronek * Notice......: Copyright 04/09/1984, UCS Inc. All Rights Reserved * * Called by...: DBASEII * * Call(s).....: N/A * * Uses(.dbf)..: MUSIC.DBF * * Creates.....: N/A * * Interfaces..: N/A * * Notes.......: Music Library Management Program * * CLEAR ERASE SET talk OFF @ 12,05 SAY "This is the Main Menu for The Music Management System" @ 16,05 SAY "Type an 'X' to exit, or any other key to continue...." ? ? WAIT TO CONTINUE IF !(CONTINUE)= 'X' QUIT ELSE RELEASE CONTINUE ENDIF !(CONTINUE)= 'X' STORE 'B' TO drive ERASE @ 12,20 SAY "What drive are your work files on?" GET drive PICTURE "A" READ SET DEFAULT TO &drive USE music STORE '?' TO choice DO WHILE t ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| MUSIC MANAGEMENT SYSTEM MAI" @ 2,50 SAY "N MENU ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| You may perform the following function" @ 5,50 SAY "s: ||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| (1) - Add new records/tapes/casset" @ 7,50 SAY "tes to the database ||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| (2) - Edit the database" @ 9,78 SAY "||" @ 10, 0 SAY "||" @ 10,78 SAY "||" @ 11, 0 SAY "|| (3) - Search for database entries" @ 11,78 SAY "||" @ 12, 0 SAY "||" @ 12,78 SAY "||" @ 13, 0 SAY "|| (4) -Quit to CP/M" @ 13,78 SAY "||" @ 14, 0 SAY "||" @ 14,78 SAY "||" @ 15, 0 SAY "||" @ 15,78 SAY "||" @ 16, 0 SAY "||" @ 16,78 SAY "||" @ 17, 0 SAY "||" @ 17,78 SAY "||" @ 18, 0 SAY "|| Enter your choice please----->" @ 18,47 GET choice PICTURE "9" @ 18,78 SAY "||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "||" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ DO CASE CASE choice= '1' STORE '?' TO choice ERASE @ 12,10 SAY "This is the Home Music Management System Add Routine......" @ 16,07 SAY "Type an 'X' to exit, or any other key to continue..." WAIT TO CONTINUE IF !(CONTINUE)= 'X' RELEASE CONTINUE STORE 'N' TO more ELSE RELEASE CONTINUE STORE 'Y' TO more ENDIF !(CONTINUE)= 'X' DO WHILE !(more)<> 'N' STORE ' ' TO artist STORE ' ' TO media STORE ' ' TO number STORE ' ' TO title STORE ' ' TO sel1,sel2,sel3,sel4,sel5 STORE ' ' TO comments ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| Home Music Management Sys" @ 2,50 SAY "tem ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| Artist" @ 5,11 GET artist PICTURE "!!!!!!!!!!!!!!!!!!!!" @ 5,40 SAY "Media" @ 5,46 GET media PICTURE "!" @ 5,57 SAY "Number" @ 5,64 GET number PICTURE "999" @ 5,78 SAY "||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| Title" @ 7,11 GET title PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| Selection 1:" @ 9,17 GET sel1 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 9,78 SAY "||" @ 10, 0 SAY "||" @ 10,78 SAY "||" @ 11, 0 SAY "|| Selection 2:" @ 11,17 GET sel2 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 11,78 SAY "||" @ 12, 0 SAY "||" @ 12,78 SAY "||" @ 13, 0 SAY "|| Selection 3:" @ 13,17 GET sel3 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 13,78 SAY "||" @ 14, 0 SAY "||" @ 14,78 SAY "||" @ 15, 0 SAY "|| Selection 4:" @ 15,17 GET sel4 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 15,78 SAY "||" @ 16, 0 SAY "||" @ 16,78 SAY "||" @ 17, 0 SAY "|| Selection 5:" @ 17,17 GET sel5 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 17,78 SAY "||" @ 18, 0 SAY "||" @ 18,78 SAY "||" @ 19, 0 SAY "|| Comments:" @ 19,14 GET comments PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 19,78 SAY "||" @ 20, 0 SAY "||" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ APPEND BLANK REPLACE artist WITH artist REPLACE media WITH media REPLACE number WITH number REPLACE sel1 WITH sel1 REPLACE se l2 WITH sel2 REPLACE sel3 WITH sel3 REPLACE sel4 WITH sel4 REPLACE sel5 WITH sel5 REPLACE comments WITH comments ERASE @ 12,20 SAY "DO YOU HAVE MORE TO ADD (Y/N)?" ? ? WAIT TO more ENDDO WHILE !(more)<> 'N' CASE choice= '2' STORE '?' TO choice ERASE @ 12,10 SAY "This is the Home Music Management System Edit Routine" @ 16,10 SAY "Type an 'X' to exit, or any other key to continue...." ? ? WAIT TO CONTINUE IF !(CONTINUE)= 'X' RELEASE CONTINUE STORE 'N' TO looking ELSE RELEASE CONTINUE STORE 'Y' TO looking ENDIF !(CONTINUE)= 'X' STORE '?' TO edchoice DO WHILE !(looking)<> 'N' STORE artist TO artist STORE media TO media STORE number TO number STORE title TO title STORE sel1 TO sel1 STORE sel2 TO sel2 STORE sel3 TO sel3 STORE sel4 TO sel4 STORE sel5 TO sel5 STORE comments TO comments ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| HOME MUSIC MANAGEMENT SYSTEM E" @ 2,50 SAY "DIT ROUTINE ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| ARTIST" @ 5,11 SAY artist @ 5,44 SAY "MEDIA" @ 5,50 SAY media @ 5,60 SAY "NUMBER" @ 5,67 SAY number @ 5,78 SAY "||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| TITLE" @ 7,10 SAY title @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| SELECTION 1" @ 9,16 SAY sel1 @ 9,78 SAY "||" @ 10, 0 SAY "|| SELECTION 2" @ 10,16 SAY sel2 @ 10,78 SAY "||" @ 11, 0 SAY "|| SELECTION 3" @ 11,16 SAY sel3 @ 11,78 SAY "||" @ 12, 0 SAY "|| SELECTION 4" @ 12,16 SAY sel4 @ 12,78 SAY "||" @ 13, 0 SAY "|| SELECTION 5" @ 13,16 SAY sel5 @ 13,78 SAY "||" @ 14, 0 SAY "||" @ 14,78 SAY "||" @ 15, 0 SAY "|| COMMENTS" @ 15,13 SAY comments @ 15,78 SAY "||" @ 16, 0 SAY "++================================================" @ 16,50 SAY "============================++" @ 17, 0 SAY "|| B)ackward 1 Record F)orward 1 Record" @ 17,51 SAY "1-9)Move x Records (B or F)||" @ 18, 0 SAY "|| E)dit Record D)elete Record" @ 18,51 SAY "S)earch for Record ||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "|| to exit to Main Menu Enter you" @ 20,50 SAY "r choice please---->" @ 20,70 GET edchoice PICTURE "!" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ DO CASE CASE !(edchoice)= 'B' STORE '?' TO edchoice SKIP -1 STORE 'Y' TO looking CASE !(edchoice)= 'F' STORE '?' TO edchoice SKIP 1 STORE 'Y' TO looking CASE !(edchoice) >= "1" .AND. !(edchoice) <= "9" STORE '?' TO bf @ 20,0 @ 20,0 SAY "|| B)ackwards or F)orwards ?" @ 20,78 SAY "||" @ 20,40 GET bf PICTURE "A" READ DO CASE CASE !(bf)= 'B' SKIP -&edchoice RELEASE bf STORE '?' TO edchoice STORE 'Y' TO looking CASE !(bf)= 'F' SKIP &edchoice RELEASE bf STORE '?' TO edchoice STORE 'Y' TO looking OTHERWISE RELEASE bf STORE '?' TO edchoice STORE 'Y' TO looking ENDCASE CASE !(edchoice)= 'E' STORE '?' TO edchoice STORE artist TO artist STORE media TO media STORE number TO number STORE title TO title STORE sel1 TO sel1 STORE sel2 TO sel2 STORE sel3 TO sel3 STORE sel4 TO sel4 STORE sel5 TO sel5 STORE comments TO comments ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| HOME MUSIC MANAGEMENT SYSTEM E" @ 2,50 SAY "DIT ROUTINE ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| ARTIST" @ 5,11 GET artist @ 5,44 SAY "MEDIA" @ 5,50 GET media @ 5,60 SAY "NUMBER" @ 5,67 GET number @ 5,78 SAY "||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| TITLE" @ 7,10 GET title  @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| SELECTION 1" @ 9,16 GET sel1 @ 9,78 SAY "||" @ 10, 0 SAY "|| SELECTION 2" @ 10,16 GET sel2 @ 10,78 SAY "||" @ 11, 0 SAY "|| SELECTION 3" @ 11,16 GET sel3 @ 11,78 SAY "||" @ 12, 0 SAY "|| SELECTION 4" @ 12,16 GET sel4 @ 12,78 SAY "||" @ 13, 0 SAY "|| SELECTION 5" @ 13,16 GET sel5 @ 13,78 SAY "||" @ 14, 0 SAY "||" @ 14,78 SAY "||" @ 15, 0 SAY "|| COMMENTS" @ 15,13 GET comments @ 15,78 SAY "||" @ 16, 0 SAY "++================================================" @ 16,50 SAY "============================++" @ 17, 0 SAY "||" @ 17,78 SAY "||" @ 18, 0 SAY "||" @ 18,78 SAY "||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "|| Edit Record as you please, to leave unchanged...." @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ REPLACE artist WITH artist REPLAC E media WITH media REPLACE number WITH number REPLACE sel1 WITH sel1 REPLACE sel2 WITH sel2 REPLACE sel3 WITH sel3 REPLACE sel4 WITH sel4 REPLACE sel5 WITH sel5 REPLACE comments WITH comments STORE 'Y' TO looking CASE !(edchoice)= 'D' STORE '?' TO edchoice STORE 'N' TO yn ERASE @ 12,20 SAY "ARE YOU SURE (Y/N)????" GET yn PICTURE "!" READ IF yn= 'Y' DELETE PACK RELEASE yn ELSE RELEASE yn ENDIF yn= 'Y' STORE 'Y' TO looking CASE !(edchoice)= 'S' STORE '?' TO edchoice STORE '?' TO pick ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| MUSIC MANAGEMENT SYSTEM SEARCH" @ 2,51 SAY "ROUTINE ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| You have a number of options to select fro" @ 5,50 SAY "m in your search. ||" @ 6, 0 SAY "||"  @ 6,78 SAY "||" @ 7, 0 SAY "|| You can select by the following methods..." @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| (1) By keyword, as listed in the COMM" @ 9,50 SAY "ENTS field ||" @ 10, 0 SAY "|| (2) By keyword, as listed in the SELE" @ 10,50 SAY "CTION fields ||" @ 11, 0 SAY "|| (3) By keyword, as listed in the TITL" @ 11,50 SAY "E field ||" @ 12, 0 SAY "|| (4) By Artist's name" @ 12,78 SAY "||" @ 13, 0 SAY "|| (5) By Media type" @ 13,78 SAY "||" @ 14, 0 SAY "|| (6) By Number" @ 14,78 SAY "||" @ 15, 0 SAY "|| (7) Return to Edit Menu" @ 15,78 SAY "||" @ 16, 0 SAY "||" @ 16,78 SAY "||" @ 17, 0 SAY "||" @ 17,78 SAY "||" @ 18, 0 SAY "||" @ 18,78 SAY "||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "|| How do you wish to select?" @ 20,46 GET pick PICTURE "9" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ DO CASE CASE pick= '1' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw GO TOP DISPLAY FOR "&TKW" $comments artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '2' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw GO TOP DISPLAY FOR "&TKW" $sel1.OR. "&TKW" $sel2.OR. "&TKW" $sel3.OR. "&TKW" $sel4.OR.; "&TKW" $sel5 artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '3' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw GO TOP DISPLAY FOR "&TKW" $title artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '4' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter Artist's Name for search" GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw GO TOP DISPLAY FOR "&TKW" $artist artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '5' STORE ' ' TO type ERASE @ 12,10 SAY "Enter Media type for search (R/C/T)" GET type PICTURE 'A' READ GO TOP DISPLAY FOR media= '&TYPE' artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '6' STORE '000' TO num ERASE @ 12,20 SAY "Enter the number to find---->" GET num PICTURE '999' READ GO TOP DISPLAY FOR number= '&NUM' artist, title, media, number OFF WAIT RELEASE num STORE '?' TO pick CASE pick= '7' RELEASE pick GO TOP STORE 'Y' TO looking OTHERWISE RELEASE pick GO TOP STORE 'N' TO looking ENDCASE OTHERWISE RELEASE edchoice STORE 'N' TO looking ENDCASE ENDDO WHILE !(looking)<> 'N' CASE choice= '3' ERASE @ 12,20 SAY "THIS IS THE MUSIC SEARCH ROUTINE...." @ 16,10 SAY "Type an 'X' to exit, or any other key to continue..." ? ? WAIT TO CONTINUE IF !(CONTINUE)= 'X' RELEASE CONTINUE STORE '?' TO choice STORE f TO srch ELSE RELEASE CONTINUE STORE t TO srch ENDIF !(CONTINUE)= 'X' STORE '?' TO choice STORE '?' TO pick DO WHILE srch ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| MUSIC MANAGEMENT SYSTEM SEARCH" @ 2,51 SAY "ROUTINE ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| You have a number of options to select fro" @ 5,50 SAY "m in your search. ||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| You can select by the following methods..." @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| (1) By keyword, as listed in the COMM" @ 9,50 SAY "ENTS field ||" @ 10, 0 SAY "|| (2) By keyword, as listed in  the SELE" @ 10,50 SAY "CTION fields ||" @ 11, 0 SAY "|| (3) By keyword, as listed in the TITL" @ 11,50 SAY "E field ||" @ 12, 0 SAY "|| (4) By Artist's name" @ 12,78 SAY "||" @ 13, 0 SAY "|| (5) By Media type" @ 13,78 SAY "||" @ 14, 0 SAY "|| (6) By Number" @ 14,78 SAY "||" @ 15, 0 SAY "|| (7) By multiple KEYWORD, as listed in COMMENTS" @ 15,78 SAY "||" @ 16, 0 SAY "|| (8) Return to Main Menu" @ 16,78 SAY "||" @ 17, 0 SAY "||" @ 17,78 SAY "||" @ 18, 0 SAY "||" @ 18,78 SAY "||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "|| How do you wish to select?" @ 20,46 GET pick PICTURE "9" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ DO CASE CASE pick= '1' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw DISPLAY FOR "&TKW" $comments artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '2' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw DISPLAY FOR "&TKW" $sel1.OR. "&TKW" $sel2.OR. "&TKW" $sel3.OR. "&TKW" $sel4.OR.; "&TKW" $sel5 artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '3' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw DISPLAY FOR "&TKW" $title artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '4' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter Artist's Name for search" ; GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw DISPLAY FOR "&TKW" $artist artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '5' STORE ' ' TO type ERASE @ 12,10 SAY "Enter Media type for search (R/C/T)" GET type; PICTURE 'A' READ DISPLAY FOR media= '&TYPE' artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '6' STORE '000' TO num ERASE @ 12,20 SAY "Enter the number to find---->" GET num PICTURE '999' READ DISPLAY FOR number= '&NUM' artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '7' STORE '0' TO hwmny ERASE @ 12,20 SAY "How many Key Words (1-4)??" GET hwmny PICTURE "9" READ DO CASE CASE hwmny= '1' STORE ' ' TO kw1 ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw1 PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw1) TO tkw1 ERASE DISPLAY FOR "&TKW1" $comments artist, title, media, number OFF WAIT STORE '?' TO pick CASE hwmny= '2' ERASE STORE ' ' TO kw1 STORE ' ' TO kw2 @ 12,10 SAY "Enter KEYWORD for search" GET kw1 PICTURE 'XXXXXXXXXXXXXXX' @ 13,10 SAY "Enter KEYWORD for search" GET kw2 PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw1) TO tkw1 STORE trim(kw2) TO tkw2 ERASE  DISPLAY FOR "&TKW1" $comments .AND. "&TKW2" $comments ; artist, title, media, number OFF WAIT STORE '?' TO pick CASE hwmny= '3' ERASE STORE ' ' TO kw1 STORE ' ' TO kw2 STORE ' ' TO kw3 @ 12,10 SAY "Enter KEYWORD for search" GET kw1 PICTURE 'XXXXXXXXXXXXXXX' @ 13,10 SAY "Enter KEYWORD for search" GET kw2 PICTURE 'XXXXXXXXXXXXXXX' @ 14,10 SAY "Enter KEYWORD for search" GET kw3 PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw1) TO tkw1 STORE trim(kw2) TO tkw2 STORE trim(kw3) TO tkw3 ERASE DISPLAY FOR "&TKW1" $comments .AND. "&TKW2" $comments .AND. ; "&TKW3" $comments artist, title, media, number OFF WAIT STORE '?' TO pick CASE hwmny= '4' ERASE STORE ' ' TO kw1 STORE ' ' TO kw2 STORE ' ' TO kw3 STORE ' ' TO kw4 @ 12,10 SAY "Enter KEYWORD for search" GET kw1 PICTURE 'XXXXXXXXXXXXXXX' @ 13,10 SAY "Enter KEYWORD for search" GET kw2 PICTURE 'XXXXXXXXXXXXXXX' @ 14,10 SAY "Enter KEYWORD for search" GET kw3 PICTURE 'XXXXXXXXXXXXXXX' @ 15,10 SAY "Enter KEYWORD for search" GET kw4 PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw1) TO tkw1 STORE trim(kw2) TO tkw2 STORE trim(kw3) TO tkw3 STORE trim(kw4) TO tkw4 ERASE DISPLAY FOR "&TKW1" $comments .AND. "&TKW2" $comments .AND. ; "&TKW3" $comments .AND. "&TKW4" $comments artist, title, media, ; number OFF WAIT STORE '?' TO pick OTHERWISE STORE '?' TO pick ENDCASE CASE pick= '8' RELEASE pick STORE f TO srch ENDCASE ENDDO WHILE srch CASE choice= '4' QUIT TO "DIR A:" , "DIR B:" ENDCASE ENDDO WHILE t  ZARTISTCpMEDIACpNUMBERCpTITLECpSEL1CpSEL2C qSEL3C+qSEL4CIqSEL5CgqCOMMENTSC7q ABBA R GREATEST HITS SOS HE IS YOUR BROTHER HONEY, HONEY WATERLOO FERNANDO ROCK, FEM AC/DC R DIRTY DEEDS DONE DIRT CHEAP DIRTY DEEDS DONE DIRT CHEAP BIG BALLS PROBLEM CHILD RIDE ON SQUEALER HARD ROCK, GUITARS, MALE  AEROSMITH C134GET YOUR WINGS GET YOUR WINGS HARD ROCK, HEAVY METAL, GUITAR, MALE AEROSMITH C269GET YOUR WINGS GET YOUR WINGS HARD ROCK, HEAVY METAL, GUITAR, MALE AEROSMITH C143TOYS IN THE ATTIC TOYS IN THE ATTIC HARD ROCK, HEAVY METAL, GUITAR, MALE AEROSMITH C166ROCKS RATS IN THE CELLAR LAST CHILD BACK IN THE SADDLE SICK AS A DOG NOBODY'S FAULT HARD ROCK, HEAVY METAL, GUITAR, MALE AEROSMITH C269DREAM ON DREAM ON HARD ROCK, HEAVY METAL, GUITAR, MALE AEROSMITH R DRAW THE LINE DRAW THE LINE CRITICAL MASS KINGS AND QUEENS SIGHT FOR SORE EYES MILK COW BLUES HARD ROCK, HEAVY METAL, GUITAR, MALE AEROSMITH R GREATEST HITS DREAM ON SAME OLD SONG AND DANCE SWEET EMOTION WALK THIS WAY LAST CHILD HARD ROCK, HEAVY METAL, GUITARS,MALE AEROSMITH R ROCKS BACK IN THE SADDLE LAST CHILD SICK AS A DOG HOME TONIGHT RATS IN THE CELLAR HARD ROCK, HEAVY METAL, GUITARS,MALE ALLMAN BROTHERS C049BEGINNINGS GUITAR, METAL, BLUES, MALE ALLMAN BROTHERS C141EAT A PEACH GUITAR, ROCK, MALE AMERICA C310GREATEST HITS HORSE WITH NO NAME SOFT ROCK, ACOUSTIC GUITAR, MALE, BALLAD ANGEL C248HELLUVA BAND  ? ANIMALS/ERIC BURDON C256BEFORE WE WERE INTERRUPTED ROCK, GUITARS, MALE, BLUES ARGENT C095ARGENT HARD ROCK, HEAVY METAL, GUITAR, MALE ARMEGEDDON C136ARMEGEDDON HARD ROCK, HEAVY METAL, GUITARS, MALE AUDIENCE C050HOUSE ON A HILL HOUSE ON A HILL INDIAN SUMMER   ACOUSTIC GUITAR, SAX, BRITISH, FOLK,ROCK, MALE AVERAGE WHITE BAND R AVERAGE WHITE BAND PICK UP THE PIECES WORK TO DO YOU GOT IT GOT THE LOVE PERSON TO PERSON FUNKY, ROCK,BRASS,BLUES,R&B AVERAGE WHITE BAND R WARMER COMMUNICATIONS SAME FEELING, DIFFERENT SONG BIG CITY LIGHTS SHE'S A DREAM THE PRICE OF THE DREAM WARMER COMMUNICATIONS FUNKY,BRASS,GUITAR,ROCK,PERCUSSION AVERAGE WHITE BAND R FEEL THE HEAT WALK ON BY FEEL NO FRET STOP THE RAIN ATLANTIC AVENUE ACE OF HEARTS FUNKY, ROCK,R&B,BLUES,GUITAR,MALE,BRASS AZTECA C036AZTECA CAN'T TAKE THE FUNK OUT OF ME AH! AH! LA PIEDRA DEL SOL PEACE EVERYBODY  AZTECA SALSA, LATIN PERCUSSION, ROCK, MALE, GUITARS, BRASS BACHMAN/TURNER C095BTO HARD ROCK, GUITARS, MALE BACHMAN/TURNER C128NOT FRAGILE ROCK, GUITARS BAD COMPANY C277STRAIGHT SHOOTER STRAIT SHOOTER GUITARS, MALE, ROCK, BAD COMPANY C131BAD CO. BAD COMPANY  ROCK,GUITAR, MALE BAD COMPANY C167RUN WITH THE PACK RUNNING WITH THE PACK ROCK, GUITARS, MALE BECK, BOGERT,APPICE C052BECK, BOGERT & APPICE HARD ROCK, GUITARS, KEYBOARDS, MALE BLACK SABBATH C056PARANOID PARANOID HEAVY METAL, HARD ROCK, GUITARS, MALE BLACK SABBATH C290WE SOLD OUR SOULS FOR ROCK&ROL  HEAVY METAL, GUITARS, HARD ROCK, MALE BLIND FAITH C227BLIND FAITH TOAD BLIND FAITH DO WHAT YOU LIKE GUITAR, PERCUSSION, ROCK, MALE BLOOD, SWEAT & TEARSC037GREATEST HITS AND WHEN I DIE YOU MADE ME SO VERY HAPPY GOD BLESS THE CHILD SPINNING WHEEL LISA, LISTEN TO ME SAX, GUITARS, BLUES, MALE, ROCK BLOOD, SWEAT & TEARSC258B S & T 4 BLUES, GUITAR, SAX, MALE, ROCK BLOOD, SWEAT & TEARSC266A BRAND NEW DAY  GUITARS, SAX, MALE, ROCK,BLUES BLOOD,SWEAT & TEARS C038NO SWEAT ROSEMARY MY OLD LADY DJANGO BACK UP AGAINST THE WALL SAVE OUR SHIP GUITARS, SAX, MALE, BLUES, ROCK BLOODROCK C0573 ? BRIAN AUGER C053CLOSER TO IT CLOSER TO IT JAZZ, KEYBOARDS, HARMONICA BUFFALO SPRINGFIELD C246BUFFALO SPRINGFIELD  ROCK, ACID, GUITAR, MALE, FEM BUTTERFIELD BLUES C051GOLDEN BUTTER BLUES, ROCK,JAZZ,SAX,HARMONICA,MALE,GUITAR BUTTERFIELD BLUES C309IT ALL COMES BACK BLUES,ROCK,SAX,MALE,GUITAR,JAZZ,HARMONICA CALDERA C233SKY ISLANDS KEYBOARDS, JAZZ, GERMAN CANNED HEAT C110CANNED HEAT  BLUES, ROCK, ACID, GUITAR,MALE CAPTAIN & TENNILLE C186COME IN FROM THE RAIN COME IN FROM THE RAIN SOFT ROCK, KEYBOARDS, FEM CHEECH & CHONG C046CHEECH & CHONG BLIND MELON CHITLIN' WINK DINKERSON ACAPULCO GOLD FILTERS DAVE VIETNAM HUMOR CHEECH & CHONG C047BIG BAMBU SISTER MARY ELEPHANT RALPH & HERBIE TORTURED OLD MAN ASHLEY ROACHCLIP LET'S MAKE A DOPE DEAL HUMOR CHEECH & CHONG C048LOS COCHINOS SERGEANT STADANKO PETER ROOTER UP HIS NOSE EVELYN WOODHEAD SPEED READING BASKETBALL JONES HUMOR CHICAGO C025CHICAGO TRANSIT AUTHORITY DOES ANYBODY REALLY KNOW LISTEN I'M A MAN QUESTIONS 67 AND 68 BEGINNINGS JAZZ, BRASS, PERCUSSION, GUITAR, ROCK,MALE CHICAGO C026CHICAGO II FANCY COLOURS 25 OR 6 TO 4 WHERE DO WE GO FROM HERE COLOUR MY WORLD POEM FOR THE PEOPLE JAZZ, ROCK, BRASS, PERCUSSION, MALE CHICAGO C027CHICAGO III A HIT BY VARESE SATURDAY IN THE PARK GOODBYE DIALOGUE (PART 1) DIALOGUE (PART 2) JAZZ, BRASS, PERCUSSION, ROCK,MALE,GUITAR CHICAGO C028CHICAGO VI  FEELIN' STRONGER EVERY DAY JAZZ, BRASS, ROCK, PERCUSSION, GUITAR, MALE CHICAGO C029CHICAGO VIII JAZZ, ROCK, MALE, BRASS, PERCUSSION, GUITAR CHICAGO C279CHICAGO IX JAZZ,ROCK,MALE,BRASS,PERCUSSION,GUITAR DAVID BOWIE C280ZIGGY STARDUST FUNKY, MALE, BRITISH, ROCK DAVID BOWIE C123YOUNG AMERICANS YOUNG AMERICANS BRITISH, ROCK, FUNKY, MALE DAVID BOWIE C280STATION TO STATION BRITISH, ROCK, FUNKY, MALE DAVID BROMBERG C198WANTED, DEAD OR ALIVE FOLK, ACOUSTIC GUITAR, HARMONICA ELVIN BISHOP C286RAISIN' HELL, LIVE LITTLE BROWN JUG WILD ABOUT MY BABY FEELIN' GOOD AGAIN STEPPIN' OUT GUITARS, ROCK, MALE, BLUES, GOSPEL, FEM, HARMONICA,SAX GATO BARBIERI  C295CALIENTE CALIENTE JAZZ, SAX,LATIN PERCUSSION GATO BARBIERI C267FENIX JAZZ, SAX, LATIN PERCUSSION GREG ALLMAN C146LAID BACK GUITAR, ROCK, MALE HARRY CHAPIN C226VERITIES AND BALDERDASH FOLK, ACOUSTIC GUITAR, MALE HARRY CHAPIN C226SHORT STORIES FOLK, ACOUSTIC GUITAR, MALE J. BRAHMS C178SYMPHONY NO. 3 CLASSICAL, SYMPHONY J. S. BACH C054GREATEST HITS, VOL II CLASSICAL, KEYBOARDS JAN HAMMER C297LIVE, WITH JEFF BECK JAZZ, GUITAR, KEYBOARDS,  JEFF BECK C239WIRED WIRED JAZZ, GUITAR, BLUES JEFF BECK C234BECK,BOGERT & APPICE, LIVE HARD ROCK, GUITARS, MALE JEFF BECK C297LIVE, WITH JAN HAMMER JAZZ, GUITARS, KEYBOARDS, ROCK JIMMY BUFFETT C185CHANGES IN LATITUDES MARGARITAVILLE CHANGES IN LATITUDES BANANA REPUBLICS FOLK, ACOUSTIC GUITAR, LATIN, ROCK JOAN BAEZ C029DIAMONDS AND RUST DIAMONDS AND RUST FEM, ACOUSTIC GUITAR, FOLK, L. VON BEETHOVEN C055GREATEST HITS 5TH SYMPHONY 9TH SYMPHONY CLASSICAL, SYMPHONY L. VON BEETHOVEN C182THE 5TH SYMPHONY CLASSICAL, SYMPHONY MIKE BLOOMFIELD C098SUPER SESSION SEASON OF THE WITCH BLUES, SAX, HARMONICA, MALE, GUITARS ROY AYER'S QUARTET C247ALL BLUES II JAZZ, DIGITAL, MALE THE BAND C258THE BEST OF THE BAND FOLK, BLUEGRASS, BANJO, ACOUSTIC GUITAR, MALE THE BAND C092THE BAND FOLK, ACOUSTIC GUITAR, BANJO, BLUEGRASS, MALE THE BEATLES C260LOVE SONGS NORWEGIAN WOOD MICHELLE  ROCK, BRITISH, MALE THE BEATLES C250RUBBER SOUL RUBBER SOUL ROCK, BRITISH, MALE THE BEATLES C041ABBEY ROAD ROCKY RACCOON ABBEY ROAD ROCK, GUITAR, BRITISH, MALE THE BEATLES C1931967 - 1970 BRITISH, ROCK, GUITARS, MALE THE BEEGEE'S C231GOLD  ROCK, GUITAR, FUNKY, MALE THE CARPENTERS C108CARPENTERS SOFT ROCK, FEM TOMMY BOLIN C278PRIVATE EYES PRIVATE EYES ROCK, GUITARS, MALE VARIOUS C202APPETIZERS WARNER BROS LOSS LEADER, VARIED ARTISTS VARIOUS C192THE BIG BALL  WARNER BROS LOSS LEADER, VARIOUS ARTISTS VARIOUS R ARIZONA SOUNDS THE STICKER SONG CITY TALKIN' BANANA KING FLY ME BACK TO TUCSON HIGH IN THE HIGHLANDS KDKB COLLECTION, VARIOUS ARTISTS VARIOUS R ARIZONA SOUNDS VOLUME IV HINDSIGHTS MEAN STREET MACHINE SOUL OF THE SPIDER ROCK & ROLL STAR THE HOOD KDKB COLLECTION, VARIOUS ARTISTS VARIOUS R ATLANTA POP FESTIVAL MEAN MISTREATER WHIPPEN POST STAND!/YOU CAN MAKE IT MR. BOJANGLES FOXY LADY ROCK FESTIVAL COLLECTION, ACID,GUITAR, VARIOUS R AMERICAN GRAFFITI ROCK AROUND THE CLOCK SURFIN' SAFARI SMOKE GETS IN YOUR EYES JOHNNY B. GOODE GREEN ONIONS ROCK,GUITARS,FEM,MALE,OLDIES,KEYBOARDS,  TO MEDIA STORE ' ' TO NUMBER STORE ' ' TO TITLE STORE ' ' TO SEL1,SEL2,SEL3,SEL4,SEL5.MT 8 .PO 14 .MB 8 .HE************ MUSIC .CMD **** Version 1.7 **** 04/09/1984 *********** * * * Author......: James A. Gronek * Notice......: Copyright 04/09/1984, UCS Inc. All Rights Reserved * * Called by...: DBASEII * * Call(s).....: N/A * * Uses(.dbf)..: MUSIC.DBF * * Creates.....: N/A * * Interfaces..: N/A * * Notes.......: Music Library Management Program * * set environmental variables CLEAR ERASE SET talk OFF * intro screen @ 12,05 SAY "This is the Main Menu for The Music Management System" @ 16,05 SAY "Type an 'X' to exit, or any other key to continue...." ? ? WAIT TO CONTINUE * evaluate response.... IF !(CONTINUE)= 'X' * time to do something else... QUIT ELSE * ok, continue on... RELEASE CONTINUE ENDIF !(CONTINUE)= 'X' * find out where work files are located... STORE 'B' TO drive ERASE @ 12,20 SAY "What drive are your work files on?" GET drive PICTURE "A" READ * set default to work file location... SET DEFAULT TO &drive * select the database USE music * initialize menu selecction variable STORE '?' TO choice * set up 'forever' loop DO WHILE t * clear screen, display menu.... ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| MUSIC MANAGEMENT SYSTEM MAI" @ 2,50 SAY "N MENU ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| You may perform the following function" @ 5,50 SAY "s: ||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| (1) - Add new records/tapes/casset" @ 7,50 SAY "tes to the database ||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| (2) - Edit the database" @ 9,78 SAY "||" @ 10, 0 SAY "||" @ 10,78 SAY "||" @ 11, 0 SAY "|| (3) - Search for database entries" @ 11,78 SAY "||" @ 12, 0 SAY "||" @ 12,78 SAY "||" @ 13, 0 SAY "|| (4) -Quit to CP/M" @ 13,78 SAY "||" @ 14, 0 SAY "||" @ 14,78 SAY "||" @ 15, 0 SAY "||" @ 15,78 SAY "||" @ 16, 0 SAY "||" @ 16,78 SAY "||" @ 17, 0 SAY "||" @ 17,78 SAY "||" @ 18, 0 SAY "|| Enter your choice please----->" @ 18,47 GET choice PICTURE "9" @ 18,78 SAY "||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "||" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ * evaluate action response... DO CASE * add new records to database.... CASE choice= '1' * reset selection variable.... STORE '?' TO choice * clear screen, intro add routine.... ERASE @ 12,10 SAY "This is the Home Music Management System Add Routine......" @ 16,07 SAY "Type an 'X' to exit, or any other key to continue..." WAIT TO CONTINUE * evaluate response.... IF !(CONTINUE)= 'X' * ok, do something else.... RELEASE CONTINUE * 'N' bypasses add routine.... STORE 'N' TO more ELSE * add some records.... RELEASE CONTINUE * 'Y' puts us in the add loop.... STORE 'Y' TO more ENDIF !(CONTINUE)= 'X' * set up conditional loop..... DO WHILE !(more)<> 'N' * initialize memvars to blank for add.... STORE ' ' TO artist STORE ' ' TO media STORE ' ' TO number STORE ' ' TO title STORE '  ' TO sel1,sel2,sel3,sel4,sel5 STORE ' ' TO ; comments * clear screen, display add format.... ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| Home Music Management Sys" @ 2,50 SAY "tem ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| Artist" @ 5,11 GET artist PICTURE "!!!!!!!!!!!!!!!!!!!!" @ 5,40 SAY "Media" @ 5,46 GET media PICTURE "!" @ 5,57 SAY "Number" @ 5,64 GET number PICTURE "999" @ 5,78 SAY "||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| Title" @ 7,11 GET title PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| Selection 1:" @ 9,17 GET sel1 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 9,78 SAY "||" @ 10, 0 SAY "||" @ 10,78 SAY "||" @ 11, 0 SAY "|| Selection 2:" @ 11,17 GET sel2 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 11,78 SAY "||" @ 12, 0 SAY "||" @ 12,78 SAY "||" @ 13, 0 SAY "|| Selection 3:" @ 13,17 GET sel3 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 13,78 SAY "||" @ 14, 0 SAY "||" @ 14,78 SAY "||" @ 15, 0 SAY "|| Selection 4:" @ 15,17 GET sel4 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 15,78 SAY "||" @ 16, 0 SAY "||" @ 16,78 SAY "||" @ 17, 0 SAY "|| Selection 5:" @ 17,17 GET sel5 PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 17,78 SAY "||" @ 18, 0 SAY "||" @ 18,78 SAY "||" @ 19, 0 SAY "|| Comments:" @ 19,14 GET comments ; PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @ 19,78 SAY "||" @ 20, 0 SAY "||" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ * add a blank record.... APPEND BLANK * input screen values to data fields.... REPLACE artist WITH artist REPLACE media WITH media REPLACE number WITH number REPLACE sel1 WITH sel1 REPLACE sel2 WITH sel2 REPLACE sel3 WITH sel3 REPLACE sel4 WITH sel4 REPLACE sel5 WITH sel5 REPLACE comments WITH comments * clear screen, see if there is more to add... ERASE @ 12,20 SAY "DO YOU HAVE MORE TO ADD (Y/N)?" ? ? WAIT TO more  * end of add loop.... ENDDO WHILE !(more)<> 'N' * edit routine.... CASE choice= '2' * reset selection variable.... STORE '?' TO choice * clear screen, intro edit routine..... ERASE @ 12,10 SAY "This is the Home Music Management System Edit Routine" @ 16,10 SAY "Type an 'X' to exit, or any other key to continue...." ? ? WAIT TO CONTINUE * evaluate response.... IF !(CONTINUE)= 'X' * time to do something else... RELEASE CONTINUE * 'N' bypasses edit routine STORE 'N' TO looking ELSE * continue on edit routine.... RELEASE CONTINUE * 'Y' puts us in the edit loop STORE 'Y' TO looking ENDIF !(CONTINUE)= 'X' * initialize selection variable.... STORE '?' TO edchoice * set up conditional loop DO WHILE !(looking)<> 'N' * store fields to memvars for editting.... STORE artist TO artist STORE media TO media STORE number TO number STORE title TO title STORE sel1 TO sel1 STORE sel2 TO sel2 STORE sel3 TO sel3 STORE sel4 TO sel4 STORE sel5 TO sel5 STORE comments TO comments * clear screen, display record, prompt for action.... ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| HOME MUSIC MANAGEMENT SYSTEM E" @ 2,50 SAY "DIT ROUTINE ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| ARTIST" @ 5,11 SAY artist @ 5,44 SAY "MEDIA" @ 5,50 SAY media @ 5,60 SAY "NUMBER" @ 5,67 SAY number @ 5,78 SAY "||" @ 6, 0 SAY "||"  @ 6,78 SAY "||" @ 7, 0 SAY "|| TITLE" @ 7,10 SAY title @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| SELECTION 1" @ 9,16 SAY sel1 @ 9,78 SAY "||" @ 10, 0 SAY "|| SELECTION 2" @ 10,16 SAY sel2 @ 10,78 SAY "||" @ 11, 0 SAY "|| SELECTION 3" @ 11,16 SAY sel3 @ 11,78 SAY "||" @ 12, 0 SAY "|| SELECTION 4" @ 12,16 SAY sel4 @ 12,78 SAY "||" @ 13, 0 SAY "|| SELECTION 5" @ 13,16 SAY sel5 @ 13,78 SAY "||" @ 14, 0 SAY "||" @ 14,78 SAY "||" @ 15, 0 SAY "|| COMMENTS" @ 15,13 SAY comments @ 15,78 SAY "||" @ 16, 0 SAY "++================================================" @ 16,50 SAY "============================++" @ 17, 0 SAY "|| B)ackward 1 Record F)orward 1 Record" @ 17,51 SAY "1-9)Move x Records (B or F)||"  @ 18, 0 SAY "|| E)dit Record D)elete Record" @ 18,51 SAY "S)earch for Record ||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "|| to exit to Main Menu Enter you" @ 20,50 SAY "r choice please---->" @ 20,70 GET edchoice PICTURE "!" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ * evaluate action response.... DO CASE * move backwards one record.... CASE !(edchoice)= 'B' * reset selection variable.... STORE '?' TO edchoice SKIP -1 STORE 'Y' TO looking * move forward one record.... CASE !(edchoice)= 'F' * reset selection variable.... STORE '?' TO edchoice SKIP 1  STORE 'Y' TO looking * move x records, forward or backward.... CASE !(edchoice) >= "1" .AND. !(edchoice) <= "9" * initialize backward or forward variable.... STORE '?' TO bf * erase line 20 @ 20,0 * prompt for backward or forward..... @ 20,0 SAY "|| B)ackwards or F)orwards ?" @ 20,78 SAY "||" @ 20,40 GET bf PICTURE "A" READ * evaluate response.... DO CASE * if backward.... CASE !(bf)= 'B' SKIP -&edchoice RELEASE bf * reset selection variable.... STORE '?' TO edchoice STORE 'Y' TO looking * if forward.... CASE !(bf)= 'F' SKIP &edchoice RELEASE bf * reset selection variable.... STORE '?' TO edchoice  STORE 'Y' TO looking * if invalid entry.... OTHERWISE RELEASE bf * reset selection variable.... STORE '?' TO edchoice STORE 'Y' TO looking ENDCASE * edit this record.... CASE !(edchoice)= 'E' * reset selection variable.... STORE '?' TO edchoice * store fields to memvars for editting... STORE artist TO artist STORE media TO media STORE number TO number STORE title TO title STORE sel1 TO sel1 STORE sel2 TO sel2 STORE sel3 TO sel3 STORE sel4 TO sel4 STORE sel5 TO sel5 STORE comments TO comments * clear screen, display record for edit.... ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| HOME MUSIC MANAGEMENT SYSTEM E" @ 2,50 SAY "DIT ROUTINE ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| ARTIST" @ 5,11 GET artist @ 5,44 SAY "MEDIA" @ 5,50 GET media @ 5,60 SAY "NUMBER" @ 5,67 GET number @ 5,78 SAY "||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| TITLE" @ 7,10 GET title @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| SELECTION 1" @ 9,16 GET sel1 @ 9,78 SAY "||" @ 10, 0 SAY "|| SELECTION 2" @ 10,16 GET sel2 @ 10,78 SAY "||" @ 11, 0 SAY "|| SELECTION 3" @ 11,16 GET sel3 @ 11,78 SAY "||" @ 12, 0 SAY "|| SELECTION 4" @ 12,16 GET sel4 @ 12,78 SAY "||" @ 13, 0 SAY "|| SELECTION 5" @ 13,16 GET sel5 @ 13,78 SAY "||" @ 14, 0 SAY "||" @ 14,78 SAY "||" @ 15, 0 SAY "|| COMMENTS" @ 15,13 GET comments @ 15,78 SAY "||" @ 16, 0 SAY "++================================================" @ 16,50 SAY "============================++" @ 17, 0 SAY "||" @ 17,78 SAY "||" @ 18, 0 SAY "||" @ 18,78 SAY "||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "|| Edit Record as you please, to leave ; unchanged...." @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ * replace field data with screen reponses.... REPLACE artist WITH artist REPLACE media WITH media REPLACE number WITH number REPLACE sel1 WITH sel1 REPLACE sel2 WITH sel2 REPLACE sel3 WITH sel3 REPLACE sel4 WITH sel4 REPLACE sel5 WITH sel5 REPLACE comments WITH comments STORE 'Y' TO looking * delete this record.... CASE !(edchoice)= 'D' * reset selection variable.... STORE '?' TO edchoice * initialize response test variable.... STORE 'N' TO yn ERASE @ 12,20 SAY "ARE YOU SURE (Y/N)????" GET yn PICTURE "!" READ * test for abort... * if no abort... IF yn= 'Y' DELETE  PACK RELEASE yn ELSE * if abort.... RELEASE yn ENDIF yn= 'Y' STORE 'Y' TO looking * search for record to edit..... CASE !(edchoice)= 'S' * reset selection variables.... STORE '?' TO edchoice STORE '?' TO pick * clear screen, display search alternatives.... ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| MUSIC MANAGEMENT SYSTEM SEARCH" @ 2,51 SAY "ROUTINE ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| You have a number of options to select fro" @ 5,50 SAY "m in your search. ||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| You can select by the following methods..." @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||" @ 9, 0 SAY "|| (1) By keyword, as listed in the COMM" @ 9,50 SAY "ENTS field ||" @ 10, 0 SAY "|| (2) By keyword, as listed in the SELE" @ 10,50 SAY "CTION fields ||" @ 11, 0 SAY "|| (3) By keyword, as listed in the TITL" @ 11,50 SAY "E field ||" @ 12, 0 SAY "|| (4) By Artist's name" @ 12,78 SAY "||" @ 13, 0 SAY "|| (5) By Media type" @ 13,78 SAY "||" @ 14, 0 SAY "|| (6) By Number" @ 14,78 SAY "||" @ 15, 0 SAY "|| (7) Return to Edit Menu"  @ 15,78 SAY "||" @ 16, 0 SAY "||" @ 16,78 SAY "||" @ 17, 0 SAY "||" @ 17,78 SAY "||" @ 18, 0 SAY "||" @ 18,78 SAY "||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "|| How do you wish to select?" @ 20,46 GET pick PICTURE "9" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ * evaluate response DO CASE * keyword search in comments field.... CASE pick= '1' * initilize keyword variables to blank.... STORE ' ' TO kw * prompt for search words... ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw ; PICTURE 'XXXXXXXXXXXXXXX' READ * trim out blanks from search variable.. STORE trim(kw) TO tkw * position record pointer to top.... GO TOP * display records that meet criteria..... DISPLAY FOR "&TKW" $comments artist, title, media, number OFF WAIT STORE '?' TO pick * keyword search in selections fields.... CASE pick= '2' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw GO TOP DISPLAY FOR "&TKW" $sel1.OR. "&TKW" $sel2.OR. "&TKW" $sel3.OR.; "&TKW" $sel4.OR."&TKW" $sel5 artist, title, media, number OFF WAIT STORE '?' TO pick * keyword search in title field....  CASE pick= '3' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw GO TOP DISPLAY FOR "&TKW" $title artist, title, media, number OFF WAIT STORE '?' TO pick * keyword search in artist field..... CASE pick= '4' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter Artist's Name for search" GET kw ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw GO TOP DISPLAY FOR "&TKW" $artist artist, title, media, number OFF WAIT STORE '?' TO pick * search by media type...... CASE pick= '5' STORE ' ' TO type  ERASE @ 12,10 SAY "Enter Media type for search (R/C/T)" GET type ; PICTURE 'A' READ GO TOP DISPLAY FOR media= '&TYPE' artist, title, media, number OFF WAIT STORE '?' TO pick * search by record or tape number.... CASE pick= '6' STORE '000' TO num ERASE @ 12,20 SAY "Enter the number to find---->" GET num ; PICTURE '999' READ GO TOP DISPLAY FOR number= '&NUM' artist, title, media, number OFF WAIT RELEASE num STORE '?' TO pick * return to edit menu..... CASE pick= '7' RELEASE pick GO TOP STORE 'Y' TO looking * invalid selection...... OTHERWISE RELEASE pick GO TOP STORE 'N' TO looking ENDCASE * invalid selection..... OTHERWISE RELEASE edchoice STORE 'N' TO looking ENDCASE * end of edit loop..... ENDDO WHILE !(looking)<> 'N' * search for records.... CASE choice= '3' * clear screen, intro search routine.... ERASE @ 12,20 SAY "THIS IS THE MUSIC SEARCH ROUTINE...." @ 16,10 SAY "Type an 'X' to exit, or any other key to continue..." ? ? WAIT TO CONTINUE * evaluate response.... * time to do something else... IF !(CONTINUE)= 'X' RELEASE CONTINUE * reset selection variable.... STORE '?' TO choice *'f' bypasses search loop STORE f TO srch ELSE RELEASE CONTINUE *'t' puts us in the search loop.... STORE t TO srch  ENDIF !(CONTINUE)= 'X' * initialize selection variable... STORE '?' TO pick * set up conditional loop DO WHILE srch * clear screen, display search alternatives.... ERASE @ 1, 0 SAY "++================================================" @ 1,50 SAY "============================++" @ 2, 0 SAY "|| MUSIC MANAGEMENT SYSTEM SEARCH" @ 2,51 SAY "ROUTINE ||" @ 3, 0 SAY "++================================================" @ 3,50 SAY "============================++" @ 4, 0 SAY "||" @ 4,78 SAY "||" @ 5, 0 SAY "|| You have a number of options to select fro" @ 5,50 SAY "m in your search. ||" @ 6, 0 SAY "||" @ 6,78 SAY "||" @ 7, 0 SAY "|| You can select by the following methods..." @ 7,78 SAY "||" @ 8, 0 SAY "||" @ 8,78 SAY "||"  @ 9, 0 SAY "|| (1) By keyword, as listed in the COMM" @ 9,50 SAY "ENTS field ||" @ 10, 0 SAY "|| (2) By keyword, as listed in the SELE" @ 10,50 SAY "CTION fields ||" @ 11, 0 SAY "|| (3) By keyword, as listed in the TITL" @ 11,50 SAY "E field ||" @ 12, 0 SAY "|| (4) By Artist's name" @ 12,78 SAY "||" @ 13, 0 SAY "|| (5) By Media type" @ 13,78 SAY "||" @ 14, 0 SAY "|| (6) By Number" @ 14,78 SAY "||" @ 15, 0 SAY "|| (7) By multiple KEYWORD, as listed ; in COMMENTS" @ 15,78 SAY "||" @ 16, 0 SAY "|| (8) Return to Main Menu" @ 16,78 SAY "||" @ 17, 0 SAY "||" @ 17,78 SAY "||" @ 18, 0 SAY "||" @ 18,78 SAY "||" @ 19, 0 SAY "||" @ 19,78 SAY "||" @ 20, 0 SAY "|| How do you wish to select?" @ 20,46 GET pick PICTURE "9" @ 20,78 SAY "||" @ 21, 0 SAY "||" @ 21,78 SAY "||" @ 22, 0 SAY "++================================================" @ 22,50 SAY "============================++" READ DO CASE * * * NOTE - see remarks on the search portion of the edit routine * for explanations on selections other than multiple * keywords. Multiple keyword selection is commented * below.... * * CASE pick= '1' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw DISPLAY FOR "&TKW" $comments artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '2' STORE '  ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw DISPLAY FOR "&TKW" $sel1.OR. "&TKW" $sel2.OR. "&TKW" $sel3.OR. ; "&TKW" $sel4.OR."&TKW" $sel5 artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '3' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw DISPLAY FOR "&TKW" $title artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '4' STORE ' ' TO kw ERASE @ 12,10 SAY "Enter Artist's Name for search" ; GET kw PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw) TO tkw DISPLAY FOR "&TKW" $artist artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '5' STORE ' ' TO type ERASE @ 12,10 SAY "Enter Media type for search (R/C/T)" GET type; PICTURE 'A' READ DISPLAY FOR media= '&TYPE' artist, title, media, number OFF WAIT STORE '?' TO pick CASE pick= '6' STORE '000' TO num ERASE @ 12,20 SAY "Enter the number to find---->" GET num ; PICTURE '999' READ DISPLAY FOR number= '&NUM' artist, title, media, number OFF WAIT STORE '?' TO pick * * MULTIPLE KEYWORD SEARCHES...... * CASE pick= '7' * initialize keyword count variable STORE '0' TO hwmny * clear screen, prompt for how many keywords.... ERASE @ 12,20 SAY "How many Key Words (1-4)??" GET hwmny PICTURE "9" READ * evaluate response.... DO CASE * search by 1 keyword... CASE hwmny= '1' * initialize keyword to blank... STORE ' ' TO kw1 * clear screen, prompt for keyword ERASE @ 12,10 SAY "Enter KEYWORD for search" GET kw1 ; PICTURE 'XXXXXXXXXXXXXXX' READ * trim out blanks from keyword... STORE trim(kw1) TO tkw1 * clear screen, display records that meet criteria... ERASE DISPLAY FOR "&TKW1" $comments artist, title, media, number OFF WAIT STORE '?' TO pick * search by 2 keywords... CASE hwmny= '2' ERASE STORE '  ' TO kw1 STORE ' ' TO kw2 @ 12,10 SAY "Enter KEYWORD for search" GET kw1 ; PICTURE 'XXXXXXXXXXXXXXX' @ 13,10 SAY "Enter KEYWORD for search" GET kw2 ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw1) TO tkw1 STORE trim(kw2) TO tkw2 ERASE DISPLAY FOR "&TKW1" $comments .AND. "&TKW2" $comments ; artist, title, media, number OFF WAIT STORE '?' TO pick * search by 3 keywords.... CASE hwmny= '3' ERASE STORE ' ' TO kw1 STORE ' ' TO kw2 STORE ' ' TO kw3 @ 12,10 SAY "Enter KEYWORD for search" GET kw1 ; PICTURE 'XXXXXXXXXXXXXXX' @ 13,10 SAY "Enter KEYWORD for search" GET kw2 ; PICTURE 'XXXXXXXXXXXXXXX' @ 14,10 SAY "Enter KEYWORD for search" GET kw3 ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw1) TO tkw1 STORE trim(kw2) TO tkw2 STORE trim(kw3) TO tkw3 ERASE DISPLAY FOR "&TKW1" $comments .AND. "&TKW2" $comments .AND. ; "&TKW3" $comments artist, title, media, number OFF WAIT STORE '?' TO pick * search by 4 keywords... CASE hwmny= '4' ERASE STORE ' ' TO kw1 STORE ' ' TO kw2 STORE ' ' TO kw3 STORE ' ' TO kw4 @ 12,10 SAY "Enter KEYWORD for search" GET kw1 ; PICTURE 'XXXXXXXXXXXXXXX' @ 13,10 SAY "Enter KEYWORD for search" GET kw2 ; PICTURE 'XXXXXXXXXXXXXXX' @ 14,10 SAY "Enter KEYWORD for search" GET kw3 ; PICTURE 'XXXXXXXXXXXXXXX' @ 15,10 SAY "Enter KEYWORD for search" GET kw4 ; PICTURE 'XXXXXXXXXXXXXXX' READ STORE trim(kw1) TO tkw1 STORE trim(kw2) TO tkw2 STORE trim(kw3) TO tkw3 STORE trim(kw4) TO tkw4 ERASE DISPLAY FOR "&TKW1" $comments .AND. "&TKW2" $comments .AND. ; "&TKW3" $comments .AND. "&TKW4" $comments artist, title, ; media, number OFF WAIT STORE '?' TO pick * invalid selection..... OTHERWISE STORE '?' TO pick ENDCASE * return to main menu... CASE pick= '8' RELEASE pick STORE f TO srch * end of multiple keyword search routines.... ENDCASE * end of search routines.... ENDDO WHILE srch  * quit for now.... CASE choice= '4' QUIT TO "DIR A:" , "DIR B:" * end of main menu selections ENDCASE ENDDO WHILE t Program Name : BOX-PC.COM for MS-DOS (8088, 8086, etc.) BOX-CPM.COM for CP/M systems (Z-80 req'd) Source File : BOX.PAS Compiler : Turbo Pascal V 3.0 Oper. System : CP/M or MS-DOS Version/date : 1.0 3/19/87 Author : Loring Chien BOX.COM is a short program I threw together to take a Text file and create a new file with a Box around the text. An Example of the output is : +-----------------------+ | | | BOXDEMO.TXT | | | | This is a demo of the | | BOX.COM program. | | | | Courtesy of | | Loring Chien | | 6519 La Mora Drive | | Houston, Texas 77083 | | | +-----------------------+ The input file was: BOXDEMO.TXT .LJ This is a demo of the BOX.COM program. .CE Courtesy of Loring Chien 6519 La Mora Drive Houston, Texas 77083 This program was "tossed" together because I felt a need for an easy method to "box" text - for announcements, program comment sections, and repetitive print statements in source code. I find normal text editors fine for creating the text, but woefully inadequate when putting the box around it. First you have to pad spaces at the end of the line, insert the box characters, and center anything you want centered. When you decide you need to edit it, you are always fixing up the margins since the editor does not know how to wrap the box characters. Then you find that it is too large or too small and you want to change the size of the box. There is no end of frustration. With this program all you need to do is edit the text sans box and submit it to the BOX program. To change things, just edit the original file, and rerun BOX, at which time you can change the size and BOX style. BOX will take care of centering or justification, as requested. Three commands are accepted, .CE, .RJ, and .LJ. in the input text. The .CE command causes subsequent lines to be centered horizontally in the box. This is the default. The .RJ and .LJ commands cause text to be right justified or left justified, respectively. Each command is in effect until another command is given. They may not be used together, nor does BOX fill or wrap any lines. The commands must have the dot appear in column one, and nothing else is allowed in the line. You will be asked for the input file name, default file type is ".TXT". You will then be asked if the file is a Wordstar document-mode file, if so, soft-carriage returns and spaces will be converted to hard ones and Soft-hyphens will be removed if not at the end of a line. You will be asked for a output filename, the default is the same name as the input file, except with a file- type of ".BOX". Options available are for auto-sizing the box (one space on both ends of the longest line), or specifying a box of a certain column width. You also have the choice between a box made of -,|, and + (line box, type 1), made of asterisks (type 2), made of IBM-PC graphic lines (types 3 & 4) or a custom box by specifying all elements (Top, sides, and four corners) in type 5. You will also be asked if you want to supply prefix and postfix strings (strings which are appended to the beginning or end of each line of the box). Prefix and Postfix strings are very useful. As an example, consider: Prefix is Writeln (' Postfix is '); then boxed text will be produced which can be inserted into a Pascal program for screen display. For BASIC, Prefix is PRINT " PostFix is " to achieve the same thing. In addition, spaces in a prefix can be used to center the box, or comment delimiters can be used to make pretty comments for a program, i.e. Prefix is / Postfix is / can make a box like /**********/ /* */ /* */ /* */ /**********/ when Asterisks are used for all three characters. Finally, when the program is done, you can review the output if you wish; you are asked before the program exits. For some really neat-looking stuff, try boxing text, and then boxing the results to get a double box. Future possible enhancements include making it take input and output file names from the command line (in which case default sizing and BOX type will be used). Files in this Archive: BOX.PAS Source code for MS-DOS or CP/M, change boolean IBMPC BOX-CPM.COM Executable for CP/M 2.2, with Z80 CPU BOX-PC.COM Executable for PC-DOS, MS-DOS BOX.DOC Documentation file for this program BOXDEMO.TXT short data file for testing the program BOXDEMO.BOX Output file from BOXDEMO.TXT BOXTITL.TXT Another demo, used to produce the title block inserted into BOX.PAS BOX.INF This file Choose whichever .COM file you need for your machine, rename it to BOX.COM. This program, BOX, is placed in the public domain by Loring Chien, Feb 10, 1988. The program and documentation is copyrighted, 1988. You may freely copy and use it, modify it or do whatever you want with it. Don't send money, don't sue me, don't claim you wrote it, and don't sell it. ͫCopyright (C) 1985 BORLAND IncBADM 5rminal SelectedP=  E RTc)1(1~7#~= oͦkԄ!!"~#(}:$= +*!5!*!!:(2!5:(>2!!!:O::O:!*! !45(! +/ 0y0( d!k5!{5__o&  :(͠|(  *"x2y( >28!"9!! og2"">~22 9/4*9 Co&ͦͣ} [ (!e{ͦA8Q0G: x@!\w# (͂ ?(*( .( w^. ^!h6# (?( *( ͂( w#>?> w#ͦ 8 !ɿ .,;:=?*[]<>{}a{ |ʹ}ͽƐ'@'7||}>2ͯ*Bڨ  "og"2>2! ""*B"[Ru*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͺw}8' RB0 >' RqRR!+ Ͱ R!+ Ͱ r!+ Ͱ r!+ Ͱ r!# Ͱ r!+ Ͱ T]KB!z> S>))0 = | |̀̀DMgo>jB0 7?= H͒<z5a)a<z {0Gɯgo||~}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } ) W _}8(8J`9{T]=o`9y ) >' ́ ͬ͗ }>' xˆ }} ˸T}ٕ(0D=z ,= ( ͒ 0%{ , 7 ?(8ͬ x ͆ - r 8˸x ͏  ,-xG}r }مM 9r .>#n0͒ { = - nx ͇ ,-(-˸G,-r }ٕ?M 9.> 8ͬ ?= u+-(>͆ 0ͬ ͆ 8 ?x ͇ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցr <(r 7{ = |٤g{٣_z٢Wy١Ox٠G{ ͬ ́ }x>' ͬ}ƀ/ƀo -́ }0͎-́ ͎,}l˸ 8 4 ͗ x( - 8́ - 8,́ }l8;*!͗ ! >4ͬ͗ ͗ ͬ--- ́ ,,,-xGg?+2n*8t z~,->' x' ͘}. ͆́ , ! >4,͢- o&0%,͗ }gr }؉}颋.:}8c~I$I~L*͢ٷx˸ }0G,<},-(-́ !>I0 ͗͘ o8 ͆ >' m.`1pF,t6|!wS<.z}[|%FXc~ur1}͆ٯx(<˸ 8 !~J 0.O!>s 8 =  n s͗ ͆ .n 0 ͎-́ OT0 j oD,:j !I}袋.}8c~I$I~L! >ͬ͗ I× nn ͗ = ͆ nf^VNF!DLT\I!!53!r1!͒!> x #-= o˸x͆(- }(x>8(z ,z `iÃ!>' |r |̀>)=|(DMbo˸88x(0 8> ̀x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#}˸}րogM| .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i&?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͺ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('k!0(ˮ]k!8ˮ!]~-#8~>27kˮw>O$6̃s #r$ͣ6̏ k ( (ˮ qk(ˮ ( k ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò*:4^q*##~6ͺ>2}*|(̓|( ̓6-#[RM8( G> A~#*'C! !TRUEFALSE!9N#Y~#( G~#> >    "~(kѻ(( !0 (ˮ!!>2Sz:0:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͮ*-w#ww##> ͮÁ""~>2:ZR0 *4#4>2:ZR> *4 #4(> >22*f(/˦:G(##~++ :O x yC!ͺ Q*:G(##~._.͚f<\=<͚*##w ͮ +4 #4x >>2:G("ͮ"*nˮ*0 SZѷR8@* N#F#s#r, 0})jS\*##w+ N#FB ͮr+s>2!T]>)j)0 0= ]R!#]*^#V#N#F#^#V>2Ͱ:0:*6 #-Nw#Fwq#p#6#w#w#w"~Á>">!DM!":*B:!>(>2>">!"2"~ʰ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pSZѷR&* s#r$ s#rL <?*L!\  <( !\$>2>2L:>!(* \$\<(!3: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>) 2""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* uKB!0>' ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#K*K*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!F"" &y*"*>2"*"!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!A(>×#!!c!:p!cp!}2*&"3!5"J!L"a!}2***&EM#͛ͺEnter file name for !L:!ͪ! " *3!|g}o!E!͛!["*J:!ͪ ͛ͺ[.!5:!ͪ!]" *3!|g}o!E"͛!]" ͛ͺ :  *a͎ *3!|g}o!*a:ͣ!}oEi"*J:*a!.e.*a:Ͳ!Eʧ"*a:!.e.=!5:=*a!*a:ͣfz""(*a*(*a*(n&s*(#ø"*3!|g}o!E #!}2*#*a:!}o}2***&EJ#*a:͛!ͪͺ not found. ]!*3!|g}o!Eʖ#*a:!!.e.*a:Ͳ!Rk*J>*!&}oE}+͛ͺN+----------------------------------------------------------------------------+ ͛ͺN| | ͛ͺN| BOX.COM / BOX.PAS by Loring Chien 3/19/87 | ͛ͺN|  | ͛ͺN| This program places a "BOX" around text from an Input File and writes it | ͛ͺN| into an Output File. You specify the width (must be 4 greater than the | ͛ͺN| longest line) of the box, or let the program choose it by specifying zero. | ͛ͺN| | ͛ͺN| There are three "dot" commands - | ͛ͺN| | ͛ͺN| ".LJ" to left justify text | ͛ͺN| | ͛ͺN| ".CE" to center text, and | ͛ͺN| | ͛ͺN| ".RJ" to right justify text. | ͛ͺN| | ͛ͺN| The dot must be in column one and the mode remains in effect until | ͛ͺN| changed. Mode commands must be in upper case and the default is ".CE". | ͛ͺN| | ͛ͺN| (note: this title block was done with BOX.PAS) | ͛ͺN| | ͛ͺN+----------------------------------------------------------------------------+ O3͛ͺNIMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM; ͛ͺN: : ͛ͺN: BOX.COM / BOX.PAS by Loring Chien 3/19/87 : ͛ͺN: : ͛ͺN: This program places a "BOX" around text from an Input File and writes it : ͛ͺN: into an Output File. You specify the width (must be 4 greater than the : ͛ͺN: longest line) of the box, or let the program choose it by specifying zero. : ͛ͺN: : ͛ͺN: There are three "dot" commands - : ͛ͺN: : ͛ͺN: ".LJ" to left justify text : ͛ͺN: : ͛ͺN: ".CE" to center text, and : ͛ͺN: : ͛ͺN: ".RJ" to right justify text. : ͛ͺN:  : ͛ͺN: The dot must be in column one and the mode remains in effect until : ͛ͺN: changed. Mode commands must be in upper case and the default is ".CE". : ͛ͺN: : ͛ͺN: (note: this title block was done with BOX.PAS) : ͛ͺN: : ͛ͺNHMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM< ͛ !MText to be Boxed!MTXT!6!͛ͺ0Is this a Wordstar Document-mode file (Y/[N]) ?  !ͩ!vD *v&}2v*v&͛" *v&!YE(5͛ͺ%Fixing Wordstar Document-mode file... !!:o ! !!:M.$$$=o ! !ͩ!uD *u&!|g}o}2u*u&!Eʥ4!-}2u*u&!E4!ͩ!uD *u&!|g}o}2u!ͺ*u&" *u&!Ei4!i !i !:M.$$$=!!!:o ! !غMOutput of Boxed Text!MBOX!6!!b!غ:o !b !" ͛ͺ:Enter desired width (columns) of Boxed text (0=AutoSize) [* !&ͺ] :  ! N * !Eʸ6͛ͺ Auto-Sizing !:!ͪͺ...  !}oEr6!ͩ!G͎ͫ !G:ͣ* Eo6!G:ͣ" *6* !" ! ͛ͺ Width set to * !&ͺ columns. !"!*}2w!-}2s!|}2r!+}2q!+}2o!+}2n!+}2pMP!MP!̾!"͛ ͛ͺChoose Box Mode : ͛ͺ(1 = line box, 2 = "*" box ͛ͺ83 = Double-line Graphic box, 4 = Single-line graphic box ͛ͺ5 = custom box ͛ͺEnter ([1], 2, 3, 4, or 5) :  !N *R 8:RO8*w&}2s*w&}2r*w&}2q*w&}2o*w&}2p*w&}2n:R†8!}2s!}2r!}2q!}2o!}2p!}2n:R½8!}2s!}2r!}2q!}2o!}2p!}2n:R:͛ ͛ͺEnter Top Line Character :  !sD ͛ͺEnter Side Character :  !rD ͛ͺEnter Upper Left Character :  !qD ͛ͺEnter Upper Rt. Character :  !oD ͛ͺEnter Lower Left Character :  !pD ͛ͺEnter Lower Rt. Character :  !nD ͛ ͛ͺUse Prefix (Y/[N]) ?  !ͩ!vD *v&}2v*v&!YEʖ:͛ͺEnter Prefix string :  !P͎ ß:͛ ͛ͺUse Postfix (Y/[N]) ?  !ͩ!vD *v&}2v*v&!YE;͛ͺEnter Postfix string :  !̾P͎ ';͛ !bͺ!:!ͪ*q&" !* !Rfz{;"ֺ!bͺ*s&" *ֺ#X;!bͺ*o&"!̾:!ͪ !bͺ!:!ͪ*r&" !* !Rfz;"ֺ!bͺ! " *ֺ#;!bͺ*r&"!̾:!ͪ !"̺!"ʺ!}oEʎ>!ͩ!G͎ͫ !G:ͣ!!G!n&!.}oE*̺!"̺* !R!G:ͣR"Һ*Һ!͸Ej=!"Һ͛ͺWarning - Line # *̺*ʺ!&ͺ in input file too long! !G:͛!ͪ *!Eʗ=*Һ!"κ*Һ*κR"к*!Eʼ=!"к*Һ*кR"κ*!E=!"κ*Һ*κR"к!bͺ!:!ͪ*r&" !*кfz*>"ֺ!bͺ! " *ֺ# >!bͺ!G:!ͪ !*κfzk>"ֺ!bͺ! " *ֺ#J>!bͺ*r&"!̾:!ͪ "ֺ!bͺ! " *ֺ#ÿ>!bͺ*r&"!̾:!ͪ !bͺ!:!ͪ*p&" !* !RfzT?"ֺ!bͺ*s&" *ֺ#1?!bͺ*n&"!̾:!ͪ !i !bi ͛ *̺͛!&ͺ! text lines read from input file. *ʺ͛!&ͺ justify commands in input file. *̺!͛!&ͺ lines written to !غ:!ͪ!." ͛ ͛ͺView Boxed Text ([Y]/N) ?  !ͩ!vD *v&}2v*v&͛" ͛ *v&!N}oE A!!غ:o ! !ͩ!G͎ͫ !G:͛!ͪ !E@!i " ͛ *v&!N}oE7v!!غ:o ! !ͩ!G͎ͫ !G:͛!ͪ !; TITLE 'NOTATE - ADD COMMENTS TO ASSEMBLER PROGRAM' ; ORG 100H ; ; INVOKED BY: NOTATE ; INPUT FILE: .ASM ; OUTPUT FILE: .ASM ; INPUT FILE IS RENAMED TO .BAK ; ; EACH LINE OF THE INPUT FILE IS DISPLAYED, AND THE ; USER IS PROMPTED FOR A COMMENT. IF A COMMENT IS ; ENTERED, IT IS INSERTED IN THE FILE. THE PROCESS ; MAY BE TERMINATED BY ENTERING ^Z AS A COMMENT. ; ; CP/M MACRO LIBRARIES: MACLIB NCOMPARE MACLIB SYMSTACK MACLIB SEQIO MACLIB DOWHILES MACLIB WHENS ; ; ADDITIONAL MACROS: READ MACRO F,X ;;READ FROM FILE F INTO X GET F STA X ENDM ; WRITE MACRO F,X ;;WRITE FROM X TO FILE F LDA X ;; AND THE CONSOLE PUT F LDA X PUT CON ENDM ; NXTCHR MACRO I,O,C ;;BUMP CHARACTER BEING PROCESSED WRITE O,C ;; OUTPUT FILE O READ I,C ;; INPUT FILE C ENDM ; LHLD @BDOS+1 ;SET STACK AT TOP OF TPA DCX H SPHL ; ; OPEN SOURCE FILE FILE INFILE,SOURCE,,1,ASM,4096 ; OPEN TEMPORARY OUTPUT FILE FILE OUTFILE,DEST,,1,$$$,4096 ; DO FIRST INPUT READ SOURCE,CHAR ; ; NOW EXECUTE MAIN LOOP UNTIL EOF DOWHILE CHAR,NEQ,%EOF ;LOOP UNTIL EOF DOWHILE CHAR,EQL,%';' DOWHILE CHAR,NEQ,10 ;SKIP COMMENTED LINES NXTCHR SOURCE,DEST,CHAR ENDDO NXTCHR SOURCE,DEST,CHAR ENDDO WHEN CHAR,EQL,13 ;FOUND END OF A LINE LXI D,PROMPT ; PROMPT FOR COMMENT MVI C,9 ; WITH TAB AND SEMICOLON CALL @BDOS LXI H,COMBUF ;INPUT THE COMMENT MVI M,128 PUSH H XCHG MVI C,10 CALL @BDOS POP H INX H PUSH H MOV A,M WHEN COMSIZ,EQL,1 ;SINGLE CHAR? WHEN COMONE,EQL,%EOF ;CTL-Z? POP H ! DOWHILE CHAR,NEQ,%EOF LDA CHAR ;COPY REST OF FILE WITH PUT DEST ; NO FURTHER COMMENTS READ SOURCE,CHAR ENDDO JMP CLOSUP ; AND EXIT ENDW ! ENDW WHEN COMSIZ,NEQ,0 ;OUTPUT TAB AND SEMICOLON MVI A,9 ; IF A COMMENT WAS ENTERED PUT DEST MVI A,';' PUT DEST ENDW DOWHILE COMSIZ,GTR,0 ;INSERT THE COMMENT POP H INX H PUSH H MOV A,M PUT DEST LXI H,COMSIZ DCR M ENDDO POP H ENDW NXTCHR SOURCE,DEST,CHAR ;GET NEXT CHARACTER ENDDO ;END OF MAIN LOOP ; ; CLOSE AND SWITCH FILES CLOSUP: FINIS DEST ;CLOSE OUTPUT FILE FILE SETFILE,BACKUP,,1,BAK ;CREATE .BAK FCB ERASE BACKUP ;DELETE OLD BACKUP IF ANY RENAME BACKUP,SOURCE ;RENAME INPUT FILE TO .BAK RENAME SOURCE,DEST ;RENAME OUTPUT TO INPUT ; ; ALL DONE, EXIT JMP 0 ; CHAR: DS 1 ;HOLDS CURRENT CHARACTER FROM SOURCE FILE COMBUF: DS 130 ;INPUT BUFFER FOR COMMENT COMSIZ EQU COMBUF+1 ;LENGTH OF INPUT (SET BY CP/M) COMONE EQU COMBUF+2 ;FIRST CHARACTER INPUT ; PROMPT: DB 9,';$' ; BUFFERS: ;MACROS WILL STICK BUFFERS HERE MEMSIZE EQU BUFFERS+@NXTB ;TOTAL MEMORY USED END *+~# !\ F ͠ ͻ ͵ASM͠ ͖ 8{ Ăy ö*B*D}|ڟ!"D*B{zґ*@‹*D"D]*D"B!"D*@*B}>*D#"Dɯ2+2?!"B"D<  NO SOURCE FILE$!\ #D y*+$$$# !\  å**!}|ڕ!"!*{z҇*i*!"!; u DISK FULL: DEST$!"!**!#"!ɯ22!"!"!<  NO DIR SPACE: DEST$I2s:s:s;>:s $:s&:s_I2s:s&:s_I2s:s µ !t6 #~:u‰:v‰:sʆ:s&I2so:uʛ> &>;&:uڴʴ#~&!u5Û:s&:s_I2s*!}">&<  CANNOT CLOSE DEST$!\ ?2s:sBAKs_I2s:^ w# O!J!Jʆ:s&I2so:uʛ> &>;&:uڴʴ#~&!u5Û:s&:s_I2s*!}">&<  ;$; ; SET UP ANY CP/M LINE PRINTER FOR SPECIAL COMMANDS ; ; PRSET: CSECT ORG 256 LHLD SPSAV ; GET THE 'SPSAV' CONTENTS - '0' DAD SP ; ADD THE (SP) CONTENTS TO (HL) SHLD SPSAV ; SAVE THE STACK POINTER ADDRESS LXI SP,STACK ; ASSIGN A NEW STACK POINTER ADDRESS JMP START ; START THE PROGRAM ; PRTBLS: DB 'EPSON ' ; NAME OF THE DEFAULT PRINT TABLE DW EPSON ; START ADDRESS OF PRINT TABLE (FOR PATCH) DW ENDEPS ; END ADDRESS OF PRINT TABLE PRTABL: DS 2 ; PRINT TABLE IN USE ; DS 30*2 ; SET UP 30 LEVEL STACK AREA STACK: EQU $ ; ESTABLISH NEW STACK SPSAV: DW 00 ; CALLER STACK ADDRESS ; ; STANDARD CP/M EQUATES ; WARM EQU 00 ; WARM BOOT RETURN CLEAR EQU 26 ; CLEAR SCREEN CCINP EQU 01 ; DIRECT CONSOLE INPUT CCOUT EQU 02  ; DIRECT CONSOLE OUTPUT LIST EQU 05 ; CP/M LIST DEVICE RBUFF EQU 10 ; CP/M CONSOLE DEVICE INPUT PBUFF EQU 09 ; CP/M CONSOLE DEVICE OUTPUT BDOS EQU 05 ; LOCATION OF BDOS CR EQU 13 ; CARRIAGE RETURN LF EQU 10 ; LINE FEED ESC EQU 27 ; 'ESCAPE FUNCTION' DOLR EQU 36 ; '$' PNDSIGN EQU 25 ; '#" ZERO EQU 00 ; '0' ONE EQU 01 ; '1' TWO EQU 02 ; '2' THREE EQU 03 ; '3' FOUR EQU 04 ; '4' SEVEN EQU 07 ; '7' EIGHT EQU 08 ; '8' SEVEN2 EQU 72 ; '72' DEFAULT NCOLS UCN EQU 78 ; 'N' LCN EQU 110 ; 'n' COMMA EQU 44 ; ',' THIRTY EQU 48 ; '30H' BLANK EQU 32 ; 'SP' SLASH EQU 47 ; '/' TEN EQU 10 ; '10' NINER EQU 99 ; '99' HUNDRED EQU 100 ; '100' SLFLAG EQU 127 ; '127' ZEROF EQU 15 ; B'0000 1111' FZERO EQU 240 ; B'1111 0000' FMAX EQU 255 ; X'FF' CCPK EQU 30 ; '20' BLANK EQU 32 ; ' ' F12 EQU 12 ; '12' F13 EQU 13 ; '13' F18 EQU 18 ; '18' F19 EQU 19 ; '19' F21 EQU 21 ; '21' ; ; START OF PROGRAM ; RETRY: LXI SP,STACK ; REINITIALIZE THE STACK POINTER MVI A,ZERO ; GET A '0' IN (A) STA RBUFFER+1 ; RESET 'RBUFFER' COUNTER STA PBUFFER+1 ; RESET 'PBUFFER' COUNTER STA OBUFFER+1 ; RESET 'OBUFFER' COUNTER STA TEST ; RESET 'TEST' JMP RETR1 ; START: EQU $ MVI A,CCPK ; GET AN INPUT COUNTER STA RBUFFER+1 ; SAVE THE COUNTER MOV B,A  ; GET A COPY MVI A,ZERO ; GET A '0' LXI H,RBUFFER+2 ; GET THE BUFFER ADDRESS ; INIT: MOV M,A ; SAVE AT (HL) INX H ; INCREMENT (HL) DCR B ; DECREMENT (BC) JNZ INIT ; LOOP ; LHLD CCP ; GET THE 'CCP' ADDRESS IN (HL) XCHG ; EXCHANGE (DE) AND (HL) REGISTERS LXI H,RBUFFER+2 ; GET THE INPUT BUFFER ADDRESS MVI B,CCPK ; SET UP TO COPY ; COPY: LDAX D ; GET AN INPUT BYTE FROM (DE) MOV M,A ; SAVE AT (HL) INX D ; INCREMENT (DE) INX H ; INCREMENT (HL) DCR B ; DECREMENT (B) JNZ COPY ; LOOP ; ; LXI D,RBUFFER+1 ; GET THE INPUT ADDRESS ; CALL HXTERM ; WRITE IT OUT IN HEX ; LDA RBUFFER+2 ; GET THE 'CCP' COUNTER CPI ZERO ; CHECK IF ANYTHING INPUT JZ RETR1 ; SET UP THE MENU ADI ONE ; SET UP THE LOOP COUNTER MOV B,A ; GET THE COUNTER IN (B) LXI D,RBUFFER+2 ; GET THE 'OUTPUT' ADDRESS LXI H,RBUFFER+3 ; GET THE 'INPUT' ADDRESS MVI C,ONE ; INITIALIZE THE (C) REGISTER ; COPY1: MOV A,M ; GET AN INPUT SAMPLE INX H ; INCREMENT (HL) DCR B ; DECREMENT THE COUNTER JZ COPY2 ; MOVED ALL BYTES OF DATA CPI BLANK ; IS IT BLANK JZ COPY1 ; DON'T COPY STAX D ; SAVE AT (DE) INX D ; INCREMENT (DE) INR C ; INCREMENT THE COUNTER JMP COPY1 ; LOOP UNTIL DONE ; COPY2 EQU $ MVI A,PNDSIGN ; GET A '#' STAX D ; SAVE AT (DE) INX D ; INCREMENT (DE) MVI A,DOLR ; GET A '$' STAX D ; SAVE AT (DE) INX D ; INCREMENT (DE) MOV A,C ; GET THE COUNTER ADI TWO ; SET UP COUNTERS STA RBUFFER+1 ; SAVE ; ; LXI D,RBUFFER+1 ; GET THE MOVED DATA ; CALL HXTERM ; ECHO IN HEX ; JMP GOMESG ; RETR1: EQU $ LXI D,CLRSCN ; CLEAR THE SCREEN CALL WRTERM ; DO IT ; LXI D,OPTIONS ; LIST THE OPTIONS CALL WRTERM ; DO IT ; LXI D,PROMPT ; ISSUE THE 'PROMPT' MESSAGE CALL WRTERM ; DO IT - NOTE NO 'CRLF' ; LXI D,RBUFFER ; GET THE BUFFER LOCATION CALL RDTERM ; READ OPTIONS FROM THE KEYBOARD ; GOMESG: EQU $ LXI D,MESG ; OUTPUT THE READ MESSAGE CALL WRTERM ; DO IT ; LXI D,RBUFFER+2 ; GET THE INPUT BUFFER LOCATION CALL WRTERM ; ECHO THE INPUT PARAMETERS ; LXI D,CRLF ; FINISH WRITE WITH CR LF CALL WRTERM ; DO IT ; LXI B,PBUFFER+2 ; GET THE OUTPUT BUFFER LOCATION LXI D,RBUFFER+2 ; GET THE INPUT BUFFER LOCATION CALL PARSE ; SEPARATE THE INPUT INSTRUCTIONS ; ; LXI D,PBUFFER+1 ; GET THE PBUFFER ADDRESS ; CALL HXTERM ; ECHO THE INPUT PARAMETERS IN HEX ; LHLD PRTBLS+8 ; GET THE PRINTER TABLE ADDRESS SHLD PRTABL ; SAVE ; CALL FIXTABL ; ENTER THE OPTIONAL COMMANDS INTO THE TABLE ; LXI B,OBUFFER+2 ; GET THE OUTPUT BUFFER LOCATION LXI D,PBUFFER+2 ; GET THE INPUT BUFFER LOCATION CALL PRCMND ; PUT THE PRINTER COMMANDS INTO A BUFFER ; LXI D,PMESG ; GET THE PRINTER MESSAGE CALL WRTERM ; DO IT ; LXI D,OBUFFER+1 ; GET THE OUTPUT BUFFER ADDRESS CALL HXTERM ; ECHO THE OUTPUT PARAMETERS IN HEX ; LDA OBUFFER+1 ; GET THE 'OBUFFER' COUNTER MOV C,A ; PUT IN (C) LXI D,OBUFFER+2 ; GET THE OUTPUT BUFFER ADDRESS AGAIN CALL PRINT ; SET UP THE PRINTER ; LDA TEST ; GET THE 'TEST' OPTION CPI ZERO ; STILL ZERO ?? JZ RTNCPM ; YES - ALLDONE ; LDA RBUFFER+1 ; GET THE 'RBUFFER' COUNTER MOV C,A ; PUT IN (C) LXI D,RBUFFER+2 ; GET THE INPUT PARAMETER LOCATION CALL PRINT ; PRINT IT ; MVI A,EIGHT ; TEMP 'NLINES' STA NLINES ; SAVE MVI A,SEVEN2 ; TEMP 'NCOLS' STA NCOLS ; SAVE ; LDA NLINES ; GET NUMBER OF LINES FOR 1 INCH MOV B,A ; GET A COPY IN (B) LDA NCOLS ; GET NUMBER OF COLUMNS TO PRINT MOV C,A ; GET A COPY IN (C) LXI D,PSTRING ; GET THE AREA TO BE PRINTED ; NXTLIN: PUSH D ; SAVE (DE) PUSH B ; SAVE (BC) CALL PRINT ; PRINT A LINE POP B ; RESTORE (BC) POP D ; RESTORE (DE) INX D ; INCREMENT A PRINT POSITION DCR B ; DECREMENT THE LINE COUNTER JNZ NXTLIN ; PRINT NEXT LINE ; LXI D,ACCMSG ; GET THE ACCEPTANCE MESSAGE CALL WRTERM ; DO IT ; NXTL: CALL TERMIN ; GET A CHARACTER FROM THE KEYBOARD CPI ZERO ; HAS ANYTHING BEEN ENTERED JZ NXTL ; LOOP UNTIL ANYTHING ENTERED CPI UCN ; CHECK RETURN CODE JZ RETRY ; TRY AGAIN CPI LCN ; CHECK THE RETURN CODE JZ RETRY ; TRY AGAIN JMP RTNCPM ; RETURN TO CALLER ; RTNCPM: EQU $ LXI D,RMESG ; ECHO THE 'RETURN' MESSAGE  CALL WRTERM ; DO IT LHLD SPSAV ; GET THE STACK POINTER ADDRESS SPHL ; EXCHANGE (SP) AND (HL) REGISTERS JMP WARM ; RETURN TO CP/M ; ; ADD THE OPTIONAL COMMANDS TO THE PRINT TABLE ; FIXTABL: LHLD PRTABL ; GET THE ADDRESS OF THE PRINT TABLE MVI D,ZERO ; GET A ZERO IN (D) MVI E,EIGHT ; GET A '8' IN (E) DAD D ; ADD (DE) TO (HL) ; LDA N12 ; GET THE F12 CONTENTS CALL MOVDAT ; SAVE LDA N13 ; GET THE F13 CONTENTS CALL MOVDAT ; SAVE LDA N18 ; GET THE F18 CONTENTS CALL MOVDAT ; SAVE LDA N19 ; GET THE F19 CONTENTS CALL MOVDAT ; SAVE LDA N21 ; GET THE F19 CONTENTS CALL MOVDAT ; SAVE RET ; MOVDAT: MOV E,M ; GET THE BYTE AT (HL) INX H  ; INCREMENT (HL) MOV D,M ; GET THE BYTE AT (HL) INX H ; INCREMENT (HL) XCHG ; EXCHANGE (DE) AND (HL) MOV M,A ; STORE AT (HL) XCHG ; EXCHANGE (DE) AND (HL) AGAIN RET ; RETURN TO CALLER ; ; CREATE THE OUTPUT BUFFER WITH PRINTER COMMANDS ; PRCMND: PUSH H ; SAVE (HL) CONTENTS PUSH D ; SAVE (DE) CONTENTS (INPUT) XCHG ; GET THE (DE) ADDRESS IN (HL) PRL1: EQU $ MOV A,M ; GET AN INPUT VALUE INX H ; INCREMENT (HL) PUSH H ; SAVE (HL) CONTENTS PUSH B ; SAVE (BC) CONTENTS CPI FMAX ; CHECK IF LAST VALUE JZ PRL9 ; ALL DONE CPI NINER ; CHECK FOR 'TEST' FUNCTION JZ PRL7 ; TEST REQUESTED LHLD PRTABL ; GET THE PRINTER TABLE MOV B,A ; SAVE THE INPUT VALUE ; PRL2: EQU $ MOV A,M ; GET THE 'OP' CODE CPI FMAX ; CHECK IF LAST VALUE JZ PRL8 ; REQUESTED VALUE NOT FOUND CMP B ; CHECK AGAINST REQUESTED NUMBER JZ PRL3 ; (A) = (B) INX H ; INCREMENT (HL) MVI D,ZERO ; GET A '0' IN D MOV E,M ; GET THE JUMP COUNTER DAD D ; ADD (DE) TO (HL) JMP PRL2 ; LOOP ; PRL3: EQU $ INX H ; INCREMENT (HL) MOV D,M ; GET THE LENGTH OF PR SEQUENCE INX H ; INCREMENT (HL) AGAIN LDA OBUFFER+1 ; GET THE OUTPUT BYTE COUNTER ADD D ; ADD OUTPUT LENGTH STA OBUFFER+1 ; SAVE DCR D ; DECREMENT THE COUNTER MVI A,ESC ; GET THE ESCAPE FUNCTION  POP B ; GET OUTPUT ARRAY ADDRESS STAX B ; SAVE AT (BC) INX B ; INCREMENT THE (BC) ADDRESS ; PRL4: EQU $ MOV A,M ; GET AN INPUT SAMPLE STAX B ; SAVE AT (BC) INX B ; INCREMENT THE (BC) ADDRESS INX H ; INCREMENT THE (HL) ADDRESS DCR D ; DECREMENT THE COUNTER JNZ PRL4 ; LOOP UNTIL DONE ; POP H ; RESTORE INPUT ADDRESS JMP PRL1 ; LOOK FOR NEXT INPUT VALUE ; PRL7: STA TEST ; ACTIVE THE TEST FUNCTION FLAG POP B ; RESTORE (BC) POP H ; RESTORE (HL) JMP PRL1 ; CONTINUE ; PRL8: EQU $ LXI D,ERRMSG2 ; GET THE RROR MESSAGE CALL WRTERM ; DO IT JMP RETRY ; PRL9: EQU $ POP B ; RESTORE (BC) MVI  A,CR ; GET A STAX B ; SAVE AT (BC) INX B ; INCREMENT (BC) MVI A,LF ; GET A LINE FEED STAX B ; SAVE AT (BC) INX B ; INCREMENT (BC) MVI A,DOLR ; GET A '$' SIGN STAX B ; STORE AT (BC) INX B ; INCREMENT (BC) LDA OBUFFER+1 ; GET THE OUTPUT COUNTER ADI FOUR ; INCREMENT (A) BY 4 STA OBUFFER+1 ; SAVE POP H ; RESTORE (HL) POP D ; RESTORE (DE) CONTENTS POP H ; RESTORE (HL) CONTENTS RET ; RETURN TO CALLER ; ; READ A SINGLE CHARACTER FROM THE CONSOLE ; TERMIN: PUSH H ; SAVE (HL) CONTENTS PUSH B ; SAVE (BC) CONTENTS MVI C,CCINP ; GET THE BDOS FUNCTION CALL BDOS ; GO TO THE FUNCTION (RETURN IN (A))  POP B ; RESTORE (BC) CONTENTS POP H ; RESTORE (HL) CONTENTS RET ; ; OUTPUT A SINGLE CHARACTER TO THE SCREEN ; COUT: PUSH H ; SAVE (HL) CONTENTS PUSH B ; SAVE (BC) CONTENTS MVI C,CCOUT ; SET THE BDOS FUNCTION CALL BDOS ; GO TO THE FUNCTION POP B ; RESTORE (BC) CONTENTS POP H ; RESTORE (HL) CONTENTS RET ; RETURN TO CALLER ; ; READ DATA FROM THER TERMINAL KEYBOARD ; RDTERM: PUSH H ; SAVE (HL) CONTENTS PUSH B ; SAVE (BC) CONTENTS MVI C,RBUFF ; SET THE BDOS FUNCTION CALL BDOS ; GO TO THE FUNCTION ; LXI H,RBUFFER+1 ; GET THE BUFFER LOCATION +1 (LENGTH) MOV A,M ; GET THE CONTENTS IN (A) CPI ZERO ; CHECK IF ANYTHING INPUT JZ NOINP ; ONLY FROM USER FIND: INX H ; INCREMENT (HL) DCR A ; DECREMENT (A) JNZ FIND ; DECREMENT TO END OF COUNTER NOINP: INX H ; INCREMENT (HL) ONCE MORE MVI A,PNDSIGN ; GET A '#' IN (A) MOV M,A ; STORE AT (HL) ADDRESS INX H ; INCREMENT (HL) AGAIN MVI A,DOLR ; GET A '$' IN (A) MOV M,A ; STORE AT (HL) ; POP B ; RESTORE (BC) CONTENTS POP H ; RESTORE (HL) CONTENTS RET ; RETURN TO CALLER ; ; OUTPUT HEXIDECIMAL DATA TO THE TERMINAL SCREEN ; HXTERM: XCHG ; GET THE (DE) ADDRESS IN (HL) MOV B,M ; GET THE COUNTER IN (B) HXLOOP: MOV A,M ; GET A HEX BYTE OF DATA ANI FZERO ; SAVE THE HIGH ORDER BITS ONLY RRC ; ROTATE RIGHT ONE BIT RRC ; ROTATE RIGHT ONE BIT   RRC ; ROTATE RIGHT ONE BIT RRC ; ROTATE RIGHT ONE BIT CALL LOOKUP ; CONVERT THE BYTE TO ASCII ; ADI THIRTY ; ASCII-IZE THE BYTE MOV E,A ; GET THE BYTE OF DATA IN (E) MOV A,M ; GET THE HEX BYTE OF DATA AGAIN ANI ZEROF ; SAVE THE LOW ORDER BITS ONLY CALL LOOKUP ; CONVERT THE BYTE TO ASCII ; ADI THIRTY ; ASCII IZE THE BYTE MOV D,A ; SAVE (A) IN (D) PUSH B ; SAVE (BC) PUSH H ; SAVE (HL) PUSH D ; SAVE (DE) CALL COUT ; GO TO THE FUNCTION POP D ; RESTORE (DE) MOV E,D ; GET THE BYTE OF DATA IN (E) CALL COUT ; GO TO THE FUNCTION MVI E,BLANK ; INSERT A BLANK CALL COUT ; GO TO THE FUNCTION POP H ; RESTORE (HL) POP B ; RESTORE (BC) INX H ; INCRMENT (HL) DCR B ; DECREMENT THE COUNTER JNZ HXLOOP ; LOOP TO END OF COUNTER LXI D,CRLF ; CARRIAGE RETURN - LINE FEED CALL WRTERM ; DO IT RET ; RETURN TO CALLER ; ; CONVERT A HEXIDECIMAL BYTE TO AN ASCII BYTE FOR PRINTING ; LOOKUP: PUSH H ; SAVE (HL) LXI H,TABLE ; GET THE CONVERSION TABLE CPI ZERO ; DOES (A) CONTAIN A ZERO JZ LOOK2 ; YES LOOK1: INX H ; INCREMENT (HL) DCR A ; DECREMENT (A) JNZ LOOK1 ; LOOP UNTIL (A) = 0 LOOK2: MOV A,M ; GET THE TABLE CONTENTS IN (A) POP H ; RESTORE (HL) RET ; ; PARSE THE INPUT ARRAY TO FORM THE OUTPUT ARRAY ; PARSE: PUSH H ; SAVE (HL) CONTENTS PUSH D ; SAVE (DE) CONTENTS (INPUT) XCHG ; GET THE (DE) ADDRESS IN (HL) MVI D,ZERO ; ZERO (DE) MVI E,ZERO ; ZERO (DE) MVI A,ZERO ; GET A '0' STA AUXCOD ; INITIALIZE THE AUXCOD FLAG ; LOOP1: MOV A,M ; GET THE BYTE AT (HL) INTO A CPI PNDSIGN ; IS IT A '#' IN (A) JZ RTRN1 ; NO DATA CPI BLANK ; IS IT A BLANK IN (A) JZ INCRIN ; YES, INCREMENT THE INPUT POINTER CPI COMMA ; IS IT A COMMA IN (A) JZ ERR2 ; YES, NO DATA CPI SLASH ; IS IT A SLASH (/) IN (A) JZ AUXNUM1 ; YES - SETUP TO PROCESS SBI THIRTY ; ASCII TO BINARY CONVERSION MOV D,A ; SAVE IN (DE) INX H ; INCREMENT (HL) ; MOV A,M ; GET THE BYTE AT (HL) INTO A CPI PNDSIGN ; IS IT A '#' IN (A) JZ USEIT ; ALL DONE CPI BLANK ; IS IT A BLANK IN (A) JZ ERR3 ; YES, IMBEDDED BLANKS NOT PERMITTED CPI COMMA ; IS IT A COMMA IN (A) JZ USEIT ; YES, CONVERT PREVIOUS DATA TO HEX CPI SLASH ; IT IT A SLASH IN (A) JZ AUXNUM2 ; YES, SET UP TO PROCESS SBI THIRTY ; ASCII TO BINARY CONVERSION MOV E,A ; SAVE IN (DE) INX H ; INCREMENT (HL) ; MOV A,M ; GET THE BYTE AT (HL) INTO A CPI PNDSIGN ; IS IT A '#' IN (A) JZ CONVERT ; CONVERT THE NUMBER IN (DE) CPI BLANK ; IS IT A BLANK IN (A) JZ ERR3 ; YES, IMBEDDED BLANKS NOT PERMITTED CPI COMMA ; IT IT A COMMA IN (A) JZ CONVERT ; CONVERT THE NUMBER IN (DE) CPI SLASH ; IS IT A SLASH IN (A)  JZ AUXNUM3 ; YES - SET UP TO PROCESS SBI THIRTY ; ASCII TO BINARY CONVERSION PUSH B ; SAVE (BC) MOV B,D ; GET FIRST BYTE OF ASCII NUMBER MOV D,E ; GET SECOND BYTE OF ASCII NUMBER MOV E,A ; GET THIRD BYTE OF ASCII NUMBER SUB A ; ZERO (A) ; CONV0: ADI HUNDRED ; ADD '100' TO (A) DCR B ; DECREMENT (B) JNZ CONV0 ; GO AROUND AGAIN ; MOV B,A ; SAVE AT (B) CALL HEXCON ; CONVERT THE NUMBER AT (DE) ADD B ; ADD THE NUMBER AT (B) POP B ; RESTORE (BC) INX H ; INCREMENT (HL) JMP CONV2 ; SPECIAL CONVERSION HAS BEEN DONE ; USEIT: MOV E,D ; SET UP (DE) AS A 16 BIT NUMBER MVI D,ZERO ; GET A '0' IN D JMP CONVERT ; CONVERT THE NUMBER IN (DE) ; AUX!NUM1: EQU $ JMP ERR4 ; ISSUE AN ERROR MESSAGE ; AUXNUM2: EQU $ STA AUXCOD ; SAVE THE SLASH AS A FLAG JMP USEIT ; AUX NUMBER COMING ; AUXNUM3: EQU $ STA AUXCOD ; SAVE THE SLASH AS A FLAG JMP CONVERT ; WAS A TWO DIGIT NUMBER ; CONVERT: CALL HEXCON ; CONVERT TO HEX CONV2: MOV D,A ; SAVE (A) AT (D) LDA AUXCOD ; GET THE AUXCOD CPI ZERO ; IS IT A '0' JZ CONTINU ; NO AUXCOD SAVED CPI SLASH ; IS IT A SLASH JZ CON1 ; CONDITION AUXCOD CPI F12 ; IS IT A '12' JZ CON12 ; YES CPI F13 ; IS IT A '13' JZ CON13 ; YES CPI F18 ; IS IT A '18' JZ CON18 ; YES CPI F19 ; IS IT A '19' JZ CON19 ; YES CPI F21 ; IS IT A '21' JZ CON21 ; YES JMP ERR5 ; NON OF THE ABOVE - ISSUE AN ERROR ; CON1: MOV A,D ; GET THE 'OP' CODE STA AUXCOD ; SAVE THE FUNCTION NUMBER JMP CONTINU ; WAIT FOR THE NEXT TIME AROUND ; CON12: MOV A,D ; GET THE AMOUNT STA N12 ; SAVE JMP CONV3 ; CONTINUE ; CON13: MOV A,D ; GET THE AMOUNT STA N13 ; SAVE JMP CONV3 ; CONTINUE ; CON18: MOV A,D ; GET THE AMOUNT STA N18 ; SAVE JMP CONV3 ; CONTINUE ; CON19: MOV A,D ; GET THE AMOUNT STA N19 ; SAVE JMP CONV3 ; CONTINUE ; CON21: MOV A,D ; GET THE AMOUNT STA N21 ; SAVE JMP CONV3 ; CONTINUE ; CONV3: MVI A,ZERO ; GET A '0' STA AUXCOD ; RESET 'AUXCOD'  INX H ; INCREMENT (HL) JMP LOOP1 ; GO AROUND AGAIN ; CONTINU: MOV A,D ; GET THE NUMBER FROM (D) STAX B ; SAVE (A) AT (BC) INX B ; INCREMENT (BC) MVI D,ZERO ; ZERO (D) MVI E,ZERO ; ZERO (E) ; LDA PBUFFER+1 ; GET THE COUNTER BYTE INR A ; ADD '1' TO (A) STA PBUFFER+1 ; SAVE ; CONV1: MOV A,M ; GET (A) AGAIN CPI PNDSIGN ; IS IT A '#' IN (A) JZ RTRN1 ; ALL DONE CPI BLANK ; IS IT A BLANK IN (A) JZ INCRIN ; YES, NO IMBEDDED BLANKS PERMITTED CPI COMMA ; IS IT A COMMA IN (A) JZ INCRIN ; YES, CONVERT PREVIOUS DATA TO HEX CPI SLASH ; IS IT A SLASH IN (A) JZ AUXNUM4 ; YES, SET UP TO PROCESS JMP LOOP1 ; CONTINUE ; INCRIN: INX H ; INCREMENT (HL) BY '1' JMP LOOP1 ; GO AROUND AGAIN ; AUXNUM4: INX H ; INCREMENT (HL) BY '1' JMP LOOP1 ; GO AROUND AGAIN ; RTRN1: MVI A,FMAX ; GET A X'FF' IN (A) STAX B ; SAVE IN (BC) INX B ; INCREMENT (BC) BY '1' LDA PBUFFER+1 ; GET THE COUNTER BYTE INR A ; ADD '1' TO (A) INR A ; ADD '1' TO (A) AGAIN STA PBUFFER+1 ; SAVE POP D ; RESTORE THE (DE) REGISTER POP H ; RESTORE THE (HL) REGISTER RET ; RETURN TO CALLER ; HEXCON: SUB A ; ZERO (A) ORA D ; CHECK THE CONTENTS OF (D) AND (A) JZ DZERO ; (D) CONTAINED A ZERO SUB A ; ZERO (A) ; CHKD: ADI TEN ; ADD '10' TO (A) DCR D ; DECREMENT (D) BY '1'  JZ DZERO ; TERMINATE IF NOW < 0 JMP CHKD ; LOOP FOR MORE '10' FACTORS DZERO: ADD E ; ADD (E) TO (A) FOR ENTIRE NUMBER RET ; ERR1: LXI D,ERRMSG1 ; GET ERROR MESSAGE '1' CALL WRTERM ; INDICATE THE ERROR JMP WAIT ; CONTINUE ; ERR2: LXI D,ERRMSG2 ; GET ERROR MESSAGE '2' CALL WRTERM ; INDICATE THE ERROR JMP WAIT ; CONTINUE ; ERR3: LXI D,ERRMSG3 ; GET ERROR MESSAGE '3' CALL WRTERM ; INDICATE THE ERROR JMP WAIT ; CONTINUE ; ERR4: LXI D,ERRMSG4 ; GET ERROR MESSAGE '4' CALL WRTERM ; INDICATE THE ERROR JMP WAIT ; CONTINUE ; ERR5: LXI D,ERRMSG5 ; GET ERROR MESSAGE '5' CALL WRTERM ; INDICATE THE ERROR JMP WAIT ; CONTINUE ; ; NOTIFY THE USER OF AN ERROR AND WAIT" ON REPLY ; WAIT: LXI D,WAITMSG ; ISSUE THE WAIT MESSAGE CALL WRTERM ; DO IT WAITR: CALL TERMIN ; GET THE REPLY CPI ZERO ; IS IT A'ZERO' JZ WAITR ; LOOP UNTIL SOMETHING ENTERED CPI CR ; IS IT A JZ RETRY ; GO AROUND AGAIN JMP RTNCPM ; RETURN TO CALLER ; ; WRITE DATA TO THE TERMINAL SCREEN ; WRTERM: PUSH H ; SAVE (HL) CONTENTS PUSH B ; SAVE (BC) CONTENTS MVI C,PBUFF ; SET THE BDOS FUNCTION CALL BDOS ; GO TO THE FUNCTION POP B ; RESTORE (BC) CONTENTS POP H ; RESTORE (HL) CONTENTS RET ; RETURN TO CALLER ; ; WRITE DATA TO THE LINE PRINTER ; PRINT: PUSH H ; SAVE (HL) CONTENTS XCHG ; EXCHANGE (DE) AND (HL) REGISTERS LOOP: MOV A,M ; GET A BYTE FROM (HL) IN (A) CPI DOLR ; IS A '$' IN (A) JZ ENDPRT ; ALL DONE MOV E,A ; PUT THE BYTE IN THE (E) REGISTER PUSH B ; SAVE (BC) PUSH H ; SAVE (HL) CALL BDLIST ; DO IT POP H ; RESTORE (HL) POP B ; RESTORE (BC) INX H ; INCREMENT (HL) DCR C ; DECREMENT COLUMN COUNTER JNZ LOOP ; LOOP UNTIL END OF INPUT - '$' ; LXI H,CRLF ; GET THE 'CRLF' FUNCTION MVI C,THREE ; GET A NEW COUNTER IN 'C' JMP LOOP ; OUTPUT THE 'CRLF' FUNCTION ; ENDPRT: POP H ; RESTORE (HL) TO ENTRY RET ; RETURN TO CALLER ; BDLIST: MVI C,LIST ; SET THE BDOS FUNCTION JMP BDOS ; RETURN TO CALLER ; ; STORAGE AREAS ; TABLE: DB '0','1','2','3','4','5','6','7' DB '8','9','A','B','C','D','E','F' CCP: DW 128 TEMP: DS 4 RBUFFER: DB 40 DB 00 DS 40 DB '$' PBUFFER: DB 40 DB 00 DS 40 DB '#' OBUFFER: DB 40 DB 00 DS 40 DB '%' ; N12: DB 0 ; n/72 LINES/IN. N13: DB 0 ; n/216 LINES/IN. N18: DB 0 ; LEFT MARGIN N19: DB 0 ; FORM LENGTH N21: DB 0 ; FOREIGN CHAR SET TEST: DB 0 ; TEST MODE AUXCOD: DB 0 ; AUX NUMBER COMING NLINES: DB 0 ; NUMBER OF LINES TO PRINT NCOLS: DB 0 ; NUMBER OF COLUMNS TO PRINT ; PSTRING: DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' DB 'abcdefghijklmnopqrstuvwxyz' DB '0123456789!@#%^&*()[]{}<>-=+_|\":;,.?/' DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' DB 'abcdefghijklmnopqrstuvwxyz' ; CLRSCN: DB CLEAR,CR,LF,LF,DOLR ; CLEAR THE SCREEN MESG: DB CR,LF,'Data read from the keyboard is: >>> ',DOLR PMESG: DB CR,LF,'Printer setup parameters are: >>> ',DOLR RMESG: DB CR,LF,'RETURN TO CP/M',CR,LF,DOLR PROMPT: DB CR,LF,'ENTER PRINTER OPTIONS: >>> ',DOLR ERRMSG1: DB CR,LF,'Error Message One - to try Again' DB ' or ^C To Terminate.',CR,LF,DOLR ERRMSG2: DB CR,LF,'Error Message Two - to try Again.' DB ' or ^C To Terminate.',CR,LF,DOLR ERRMSG3: DB CR,LF,'Error Message Three - to try Again.' DB ' or ^C To Terminate.',CR,LF,DOLR ERRMSG4: DB CR,LF,'Error Message Four - to try Again.' DB ' or ^C To Terminate.',CR,LF,DOLR ERRMSG5: DB CR,LF,'Error Message Five - to try Again.' DB ' or ^C To Terminate.',CR,LF,DOLR WAITMSG: DB CR,LF,'Enter Error Action: >> ',DOLR ACCMSG: DB CR,LF,'Are these parameters acceptable ??' DB ' to accept, "N" to try agian.',CR,LF,DOLR CRLF: DB CR,LF,DOLR ; OPTIONS: EQU $ DB 'The following options are available for a CP/M printer' DB CR,LF DB 'Enter Your Choices - COMMA Separated then ' DB CR,LF,LF DB 'General Parameters:',CR,LF DB ' 0. PRINTER TYPE ' DB ' 1. RESET ',CR,LF DB 'Line Style: - Choose One',CR,LF DB ' 2. ENLARGED - 5.0 Char/In. ' DB ' 5. ELITE - 12.0 Char/In.',CR,LF DB ' 3. COND/ENL - 8.5 Char/In. ' DB ' 6. CONDENSE - 17.0 Char/In.',CR,LF DB ' 4. PICA - 10.0 Char/In.',CR,LF DB 'Line Spacing: - Choose One',CR,LF DB ' 7. 2 Lines/In. ' DB ' 12. n/72 - 9/72 = 8 Lines/In.',CR,LF DB ' 8. 3 Lines/In. ' DB ' n = 0 >> 85 ',C#R,LF DB ' 9. 4 Lines/In. ' DB ' 13. n/216 - 27/216 = 8 Lines/In.',CR,LF DB ' 10. 6 Lines/In. ' DB ' n = 0 >> 255 ',CR,LF DB ' 11. 8 Lines/In. ' DB ' Input as 12/n or 13/n ',CR,LF DB 'Miscellaneous Options: - Choose as required.',CR,LF DB ' 14. Emphasized Print OR ' DB ' 15. Double Strike ',CR,LF DB ' 16. Superscript OR ' DB ' 17. Subscript ',CR,LF DB ' 18. Left Margin 0 >> 78 ' DB ' 19. Form Length 1 >> 127 ',CR,LF DB ' 20. Alternate Character Set ' DB ' 21. Inter Character Set 0 >> 10',CR,LF DB 'Invoke Test Option: - 99',CR,LF,DOLR ; K1 EQU 02 K2 EQU 03 K3 EQU 04 K6 EQU 17 ; EPSON: DB 00H,K6,'EPSON ' ; NAME OF PRINTER DW EPSF12 ; ADDRESS OF F12 FUNCTION DW EPSF13 ; ADDRESS OF F13 FUNCTION DW EPSF18 ; ADDRESS OF F18 FUNCTION DW EPSF19 ; ADDRESS OF F19 FUNCTION DW EPSF21 ; ADDRESS OF F21 FUNCTION DB 01H,K1,'@' ; RESET DB 02H,K2,'W',01 ; ENLARGED PRINT DB 03H,K2,15,14 ; COND/ENL PRINT DB 04H,K1,'P' ; PICA PRINT DB 05H,K1,'M' ; ELITE PRINT DB 06H,K1,15 ; CONDENSED PRINT DB 07H,K2,'A',36 ; 2 LINES/IN DB 08H,K2,'A',27 ; 3 LINES/IN DB 09H,K2,'A',24 ; 4 LINES/IN DB 0AH,K1,'2' ; 6 LINES/IN DB 0BH,K1,'0' ; 8 LINES/IN DB 0CH,K2,'A' ; n/72 LINES/IN EPSF12: DB 00 DB 0DH,K2,'3' ; n/216 LINES IN EPSF13: DB 00 DB 0EH,K1,'E' ; EMPHASIZED PRINT DB 0FH,K1,'G' ; DOUBLE STRIKE PRINT DB 10H,K2,'S',00 ; SUPERSCRIPT DB 11H,K2,'S',01 ; SUBSCRIPT DB 12H,K2,'l' ; LEFT MARGIN EPSF18: DB 00 DB 13H,K2,'C' ; FORM LENGTH EPSF19: DB 00 DB 14H,K1,'4' ; ALT CHAR SET DB 15H,K2,'5' ; INTERNATIONAL CHAR SET EPSF21: DB 00 DB 16H,K2,00,00 ; NOT SPECIFIED DB 17H,K2,00,00 ; NOT SPECIFIED DB 18H,K2,00,00 ; NOT SPECIFIED DB 0FFH ; EOF ENDEPS: EQU $ ; END *W9"W1WmEPSON c 1W>2B2m22>2BG>!Cw#x*;!Cw#‡:CGC!D~#ʳ ʢ â>>$y2BYA*^CnC͍*"znͩJ:O:m:BOC>2>H2:G:OF9XNYnYm*W*:͡:͡:͡:͡:͡^#V#w~#c*G~#^þ#V#:2>~#ì2ìY> > >$:2 !B~?#=:#>w#>$wF~|_~|W Z  #L!+ʊ#=…~>2~ʚ ʒ,/0W#~ ,/0_#~  , /0BS_dGͩ#Z 22 ͩW:l/9 @ GNU\z2lz2cz2cz2cz2cz2c>2#Ùz:m<2m~ʚ ʒ,ʒ/ʖÙ#Ù#Ù>:m<<2mɗʸ ʸï\ Ym ~$$_&# ! 0123456789ABCDEF($(#(%ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#%^&*()[]{}<>-=+_|\":;,.?/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz $ Data read from the keyboard is: >>> $ Printer setup parameters are: >>> $ RETURN TO CP/M $ ENTER PRINTER OPTIONS: >>> $ Error Message One - to try Again or ^C To Terminate. $ Error Message Two - to try Again. or ^C To Terminate. $ Error Message Three - to try Again. or ^C To Terminate. $ Error Message Four - to try Again. or ^C To Terminate. $ Error Message Five - to try Again. or ^C To Terminate. $ Enter Error Action: >> $ Are these parameters acceptable ?? to accept, "N" to try agian. $ $The following options are available for a CP/M printer Enter Your Choices - COMMA Separated then General Parameter$s: 0. PRINTER TYPE 1. RESET Line Style: - Choose One 2. ENLARGED - 5.0 Char/In. 5. ELITE - 12.0 Char/In. 3. COND/ENL - 8.5 Char/In. 6. CONDENSE - 17.0 Char/In. 4. PICA - 10.0 Char/In. Line Spacing: - Choose One 7. 2 Lines/In. 12. n/72 - 9/72 = 8 Lines/In. 8. 3 Lines/In. n = 0 >> 85 9. 4 Lines/In. 13. n/216 - 27/216 = 8 Lines/In. 10. 6 Lines/In. n = 0 >> 255 11. 8 Lines/In. Input as 12/n or 13/n Miscellaneous Options: - Choose as required. 14. Emphasized Print OR 15. Double Strike 16. Superscript OR 17. Subscript 18. Left Margin 0 >> 78 19. Form Length 1 >> 127 20. Alternate Character Set 21. Inter Character Set 0 >> 10 Invoke Test Option: - 99 $EPSON 4 8 J N U @WPMA$A A 2 0 A 3EGSSlC45 ************************************************************************ * * * S E T P R - Set Printer Options by: * * Frank Souder for OUCH * * * ************************************************************************ SETPR can be invoked from the command line in either line or full screen mode. For full screen mode: @ >d enter SETPR . The following menu will be displayed. The response is entered as numbers separated with commas. Some options require an extra number. This is supplied by using a "/" as a separator. Blanks should not be embedded in the string. A test example of eight lines may be displayed on you printer by including "99" as the last option. Caution!! This option may cause the top of forms to be moved to the current position. This program has been tested on an Osborne EXEC and O1 with an Epson L-80 and M-80 printers. Similar options are available for most printers. The printer options are table driven so several printers can be included. Option '0' will be used to identify the target printer using a "/" and the printer name ( eight characters or less. The code is not in place yet to match a printer name to a printer table. This is the screen appearance when the menu option is requested: The following options are available for a CP/M printer Enter Your Choices - COMMA Separated then General Parameters: 0. PRINTER TYPE 1. RESET Line Style: - Choose One 2. ENLARGED - 5.0 Char/In. 5. ELITE - 12.0 Char/In. 3. COND/ENL - 8.5 Char/In. 6. CONDENSE - 17.0 Char/In. 4. PICA - 10.0 Char/In. Line Spacing: - Choose One 7. 2 Lines/In. 12. n/72 - 9/72 = 8 Lines/In. 8. 3 Lines/In. n = 0 >> 85  9. 4 Lines/In. 13. n/216 - 27/216 = 8 Lines/In. 10. 6 Lines/In. n = 0 >> 255 11. 8 Lines/In. Input as 12/n or 13/n Miscellaneous Options: - Choose as required. 14. Emphasized Print OR 15. Double Strike 16. Superscript OR 17. Subscript 18. Left Margin 0 >> 78 19. Form Length 1 >> 127 20. Alternate Character Set 21. Inter Character Set 0 >> 10 Invoke Test Option: - 99 ENTER PRINTER OPTIONS: >>> 1,5,8,15,20 Data read from the keyboard is: >>> 1,5,8,15,20^Y Printer setup parameters are: >>> 0F 1B 40 1B 4D 1B 41 1B 1B 47 1B 34 0D 0A 24 RETURN TO CP/M The last two lines are displayed when the 'line' option is used. Please supply me with a copy of your printer specs and I will customize for you. Good luck - Frank Souder (713) 495-3228 - Stafford Texas. th a copy of your printer specs% This is the release date of the disk. NOTATE COM SETPR ASM ETPR ASM @ETPR ASM SETPR COM SETPR DOC BOX-CPM .COM 59 F2 16512 129 NOTATE .ASM D3 4E 2944 23 NOTATE .COM 89 C6 1024 8 SETPR .ASM 1C B1 34688 271 SETPR .COM 7B 0B 3200 25 SETPR .DOC 93 C5 3072 24  Fog Library Disk FOG-CPM.212 Copyright (1989) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Put a box around your text, annotate your assembler source, control your printer easily, or, if you have dBASE II, add a menu front-end, manage a music library, trim leading spaces, and print labels as you need them printed. Filename Description -12-31 .89 This is the release date of the disk. -CPM212 .DOC This is the description of the disk contents. DBFRONT .CMD 575E 15K A front-end shell which allows you to run dBASE II a menu. LTRIM .CMD 6203 1K Remove leading spaces from a data field. MAILLBL .CMD 4230 5K [dBASE Mail Labels 1 of 2] This dBASE II mailing label program uses various sized labels and allows single or multiple copies with three or four lines of information. Note that you must enter the name in the format "Last:name*First Name" to facilitate indexing but that the names are correctly printed as "First Name Last:name". MAILLBL .DBF 7CC5 1K [dBASE Mail Labels 2 of 2] MUSIC .CMD B311 20K [Music Library Mgmt 1 of 3] Manage your music library if you have dBASE II. MUSIC .DBF 7853 24K [Music Library Mgmt 2 of 3] MUSIC .DOC 9AEE 33K [Music Library Mgmt 3 of 3] BOX .DOC B599 5K ver. 2/10/88 [Box-CP/M 1 of 3] This lets you add a box around a block of text easily with text right or left justified or centered. The box size will be based on the length of the longest line. To change the box size, just modify the original text. Note that several referenced files, mainly those for the MS/PC-DOS version, are omitted from this disk. BOX .INF 3DF4 1K ver. 2/10/88 [Box-CP/M 2 of 3] BOX-CPM .COM 59F2 17K ver. 2/10/88 [Box-CP/M 3 of 3] NOTATE .COM 89C6 1K [Notate ASM file 1 of 2] Add comments to existing assembler program source code. ASM source included. NOTATE .ASM D34E 3K [Notate ASM file 2 of 2] SETPR .COM 7B0B 4K [Set Printer 1 of 3] Set the codes for the Epson MX-80 or LX-80 printers. ASM source is included so you can modify the program to work with any printer. Makes easily accessible all of the available functions of your printer. SETPR .ASM 1CB1 34K [Set Printer 2 of 3] SETPR .DOC 93C5 3K [Set Printer 3 of 3] 1K [dBASE Mail Labels 2 of 2] MUSIC .CMD B311 20K [Music Library Mgmt 1 of 3] Manage your music library if yo&'