IMD 1.16: 1/06/2007 9:58:28 FOGCPM.166 ååååååååååååååå--FOGCPM166DATASCR INCDISPLSCRINCEDITSCR INC4 EXTRACT PAS_FILECARDNOTR !"#$GETCARD INC%HELPSCR INC &'INITVAR INC(INPSCR INC)INPUT INC*+,-INPUTSCRINC.INSTALL PAS/01IOERR INC 23MAINBODYPAS4567MENU PAS%89:;<NEWFILE PAS =>PRINTER PASH?@ABCDEFGPRINTRECINCHREAD0 INCIREADKEY INC JKRETRIEVEPAS=LMNOPQRSSETCARD INCTSORTFILEPAS#UVWXYTEMPLATEPASZUNDELETEPAS [\]^VARIABLEINC _`WRITREC INCaWRTCARD INCbWRTTAG INCcCHOOSE COMhdefghijklmnopCHOOSE DOCqrsCHOOSE PQS4tuvwxyzMAIL COM€{|}~€�‚ƒ„…†‡ˆ‰ŠMAIL COM‹Œ�-03-00 87 šMAIL NOT Ž�MAIL PQSL�‘’“”•–—˜™-CPM166 DOC›œ�žååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååThis is the disk name. SCRPH14 FON:k� ”*8SCRPH16 FONÊk� –ó=SCRPH18 FONkl� ˜"^SCRPH20 FON m� ¢iSCRPH24 FONzo� â›SCRPH30 FON¥p� ZãÑSCRPH36 FON¨q� Øù=CLAS3 FON°S ç- CLAS4 FONÑS è�CLAS5 FONòS é¬CLAS7 FONø€�ê6CLASB3 FON[‰7 ëY ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååProcedure DisplayScr; Begin Clrscr; GotoXY(32,1); Write('FILE CARD DATABASE'); GotoXY(11,2); Write('___________________________________________________________'); GotoXY(11,3); Write('|| ||'); GotoXY(11,4); Write('||-------------------------------------------------------||'); GotoXY(11,5); Write('|| ||'); GotoXY(11,6); Write('|| ||'); GotoXY(11,7); Write('|| ||'); GotoXY(11,8); Write('|| ||'); GotoXY(11,9); Write('|| ||'); GotoXY(11,10); Write('|| ||'); GotoXY(11,11); Write('|| ||'); GotoXY(11,12); Write('|| ||'); GotoXY(11,13); Write('|| ||'); GotoXY(11,14); Write('|| ||'); GotoXY(11,15); Write('|| ||'); GotoXY(11,16); Write('|| ||'); GotoXY(11,17); Write('|| ||'); GotoXY(11,18); Write('|| ||'); GotoXY(11,19); Write('|| ||'); GotoXY(11,20); Write('|| ||'); GotoXY(11,21); Write('-----------------------------------------------------------'); GotoXY(11,22); Write('| | | |'); GotoXY(11,23); Write('-----------------------------------------------------------'); End; åAIL PQS €`&åAINBODYPAS €j€åENU PAS €n€åEWFILE PAS €s€åRINTER PAS €u$åRINTRECINC €~€åEAD0 INC €€åEADKEY INC €€€åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €�Í� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂu{File: DISPLSCR.LIB} Procedure DisplayRec; Begin Gotoxy(55,3); Write('Record# ',FilePointer:4); Gotoxy(13,3); Write(TagArray[1]); Gotoxy(12,22); Write(TagArray[2]); Gotoxy(31,22); Write(TagArray[3]); Gotoxy(50,22); Write(TagArray[4]); For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin Gotoxy((Column+XOffset),(Row+YOffset)); Write(CardArray[Column,Row]); End; End; End;õÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.Procedure EditScr; Var Num, Numm, XNum: Integer; Flag1, Flag2, GraphicsFlag: Boolean; Procedure Quit; Begin Flag1 := true; Flag2 := true; End; Procedure CursorUp; Begin Flag2 := true; Y := (Y-1); If Y < 1 then Y := 1; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure CursorDown; Begin Flag2 := true; Y := (Y+1); If Y > MaxRows then Y := MaxRows; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure CarriageReturn; Begin Flag2 := true; Y := (Y+1); X :=1; If Y > MaxRows then Y := 1; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure CursorLeft; Begin Flag2 := true; X := (X-1); If X < 1 then Begin X := MaxColumns; Y := (Y-1); If Y < 1 then Begin X := 1; Y := 1; End; End; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure CursorRight; Begin Flag2 := true; If Y = MaxRows then Begin X := (X+1); If X > MaxColumns then Begin X := MaxColumns; Y := MaxRows; End; End; If Y < MaxRows then Begin X := (X+1); If X > MaxColumns then Begin X := 1; Y := (Y+1); End; End; If X = (MaxColumns-5) then write(chr(7)); Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure LeftEnd; Begin Flag2 := true; X := 1; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure RightEnd; Begin Flag2 := true; X := MaxColumns; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure BeginningOfField; Begin Flag2 := true; X :=1; Y :=1; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure EndOfField; Begin Flag2 := true; X := MaxColumns; Y := MaxRows; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure EraseField; Begin Flag2 := true; For Y := 1 to MaxRows do Begin For X := 1 to MaxColumns do Begin CardArray[X,Y] := (' '); Gotoxy((X+XOffset),(Y+YOffset)); Write(CardArray[X,Y]); End; End; X :=1; Y:= 1; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure InsertCharacter; Var I: Integer; Begin Flag2 := true; For I := MaxColumns downto (X+1) do Begin CardArray[I,Y] := CardArray[(I-1),Y]; Gotoxy((I+XOffset),(Y+YOffset)); Write(CardArray[I,Y]); End; CardArray[X,Y] := (' '); Gotoxy((X+XOffset),(Y+YOffset)); Write(CardArray[X,Y]); Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure DeleteCharacter; Var I: Integer; Begin Flag2 := true; X := (X-1); If X <1 then Begin Write(chr(7)); X := 1; Gotoxy((X+XOffset),(Y+YOffset)); Exit; End; If X < (MaxColumns-1) then Begin For I := X to (MaxColumns-1) do CardArray[I,Y] := CardArray[(I+1),Y]; I := MaxColumns; CardArray[I,Y] := ' '; For I := X to MaxColumns do Begin Gotoxy((I+XOffset),(Y+YOffset)); Write(CardArray[I,Y]); End; End Else Begin I := X; CardArray[I,Y] := CardArray[(I+1),Y]; Gotoxy((I+XOffset),(Y+YOffset)); Write(CardArray[I,Y]); CardArray[MaxColumns,Y] := ' '; Gotoxy((MaxColumns+XOffset),(Y+YOffset)); Write(CardArray[MaxColumns,Y]); End; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure DeleteToEndOfLine; Var I: Integer; Begin Flag2 := true; For I := X to MaxColumns do Begin CardArray[I,Y] := (' '); Gotoxy((I+XOffset),(Y+YOffset)); Write(CardArray[I,Y]); End; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure InsertLine; Var I, R: Integer; Begin Flag2 := true; For R := MaxRows downto (Y+1) do Begin For I := 1 to MaxColumns do Begin CardArray[I,R] := CardArray[I,(R-1)]; Gotoxy((I+XOffset),(R+YOffset)); Write(CardArray[I,R]); End; End; For I := 1 to MaxColumns do Begin CardArray[I,Y] := (' '); Gotoxy((I+XOffset),(Y+YOffset)); Write(CardArray[I,Y]); End; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure DeleteLine; Var I, R: Integer; Begin Flag2 := true; For R := Y to (MaxRows-1) do Begin For I := 1 to MaxColumns do Begin CardArray[I,R] := CardArray[I,(R+1)]; Gotoxy((I+XOffset),(R+YOffset)); Write(CardArray[I,R]); End; End; For I := 1 to MaxColumns do Begin CardArray[I,MaxRows] := ' '; Gotoxy((I+XOffset),(MaxRows+YOffset)); Write(CardArray[I,MaxRows]); End; Gotoxy((X+XOffset),(Y+YOffset)); End; Procedure PrintText; Begin Gotoxy((X+XOffset),(Y+YOffset)); If X < 67 then Begin CardArray[X,Y] := Key; Write(CardArray[X,Y]); End; X := (X+1); If X = (MaxColumns-5) then Write(chr(7)); If X > MaxColumns then X := MaxColumns; Gotoxy((X+XOffset),(Y+YOffset)); End; Begin Flag1 := false; Flag2 := false; X := 1; Y := 1; Gotoxy((X+XOffset),(Y+YOffset)); Repeat Flag2 := false; Repeat Read(Kbd,Key); Numm := ord(Key); Case Numm of 1: LeftEnd; 3: EndOfField; 4: CursorRight; 5: CursorUp; 6: RightEnd; 8: CursorLeft; 9: InsertCharacter; 10: CursorDown; 11: CursorUp; 12: CursorRight; 13: CarriageReturn; 14: InsertLine; 17: DeleteToEndOfLine; 18: BeginningOfField; 19: CursorLeft; 22: Help; 24: CursorDown; 25: DeleteLine; 26: EraseField; 27: Quit; 127: DeleteCharacter; End; If Numm in[31..126] then PrintText; Until Flag2; Until Flag1; End; ÍRÍ�Íb!å! ÍÍRÍ�Enter the number : Íb!4ÁÍ+ÍîÍb*4ÁåÍQ!Ía!ÍaÍËEÊ +*4Áå!ÑÍNËEÊŽ+!öÙå*2Á+)Ñå!öÙå*2Á+)Ñ^#Vëå!Ñëás#r*4Áå!ÑÍNËEÊÄ+!öÙå*0Á+)Ñå!öÙå*0Á+)Ñ^#Vëå!Ñëás#r!ÔÝå*2Á+))å)å)å)ÑÑÑÑå*0Á+)Ñå!ëás#r*íÀå!Ñ"íÀò)Íc!å*:ÁÑÍ5z³Êy,Õ"2Á!~èå*2Á+)Ñå!öÙå*2Á+)Ñ^#Vëëás#r!Üäå*2Á+å)å)å)å)ÑÑÑÑÑå!2Úå*2Á+å)å)å)å)ÑÑÑÑÑÍ ÍÑ*2Á#Ñà ,!å!ÍÍRÍ�& Here are the weights of the values : Í�ÍbÍRÍ�Íb*:ÁåÍ©(ÍRÍ�ÍbÍRÍ�ÍbÍRÍ�$ Press any key to continue.Program EXTRACT; Type XKeyrec = Record XTagArray: Array[1..4] of String[40]; XUsed: Boolean; End; XCardrec = Record XCardArray: Array[1..55,1..16] of Char; End; Const MaxColumns: Integer = 55; MaxRows: Integer = 16; MaxKeys: Integer = 4; PrimaryKeyLen: Integer = 40; SecondaryKeyLen: Integer = 18; XOffset: Integer = 12; YOffset: Integer = 4; Var Disk: File; Disk1: File of XKeyrec; Disk3: File of XKeyrec; Disk2: File of XCardrec; Disk4: File of XCardrec; Keyrec: XKeyrec; Cardrec: XCardrec; TagArray: Array[1..4] of String[40]; CardArray: Array[1..55,1..16] of Char; Drive: String[2]; Filename: String[10]; Temp: String[80]; X, Y, Row, Column, Error, Keypointer, DFilePointer, DFileEndPointer, FileEndPointer, FilePointer: Integer; Key: Char; PrintInit, ExitFlag, Used: Boolean; Procedure Help; Forward; Procedure IOError; Var Disk: File; Num: Integer; IOErr: Boolean; Key: Char; Begin Num := 0; IOErr := false; Num := IOresult; IOErr := (Num <> 0); If IOErr then Begin Write(chr(7)); Clrscr; Gotoxy(20,12); Case Num of $01: Write('File does not exist'); $02: Write('File not open for input'); $03: Write('File not open for output'); $04: Write('File not open'); $05: Write('Can''t read from this file'); $06: Write('Can''t write to this file'); $10: Write('Error in numeric format'); $20: Write('Operation not allowed on a logical device'); $21: Write('Not allowed in the direct mode'); $22: Write('Assign to standard files not allowed'); $90: Write('Record length mismatch'); $91: Write('Seek beyond end of file'); $99: Write('Unexpected end of file'); $F0: Write('Disk write error'); $F1: Write('Directory is full'); $F2: Write('File size overflow'); $FF: Write('File dissappeared!'); Else Write('Unknown I/O Error: ',Num:3); End; Gotoxy(20,14); Write('Type any key to continue... '); Read(Kbd,Key); Clrscr; Halt; End; End; Procedure Screen; Begin Clrscr; GotoXY(30,1); Write('FILE CARD DATABASE 4.6'); GotoXY(28,3); Write('Record Extraction Program'); GotoXY(1,4); Write('--------------------------------------------------------------------------------'); GotoXY(6,6); Write('This program EXTRACTs records from one database, deleting them from the'); GotoXY(1,7); Write('original, and puts them into another. It allows you to free up space in one'); GotoXY(1,8); Write('database without losing your valuble data. EXTRACT.COM must be on the diskette'); GotoXY(1,9); Write('you are copying TO, and it must be run from the CURRENTLY LOGGED DRIVE.'); GotoXY(6,11); Write('You will then be asked for the drive which contains the data files you are'); GotoXY(1,12); Write('copying FROM. Enter A:, B:, or whatever drive is appropriate.'); GotoXY(6,14); Write('You then enter ONE, or TWO key words to search on, from the original file.'); GotoXY(1,15); Write('The program will extract the records which match the search pattern.'); GotoXY(6,17); Write('If the database you are copying TO does not exist, it will be created anew.'); GotoXY(1,18); Write('If it already exists, the records will be ADDED to the existing file. This way,'); GotoXY(1,19); Write('you can make several passes through the old file, adding each pass to the new'); GotoXY(1,20); Write('file.'); GotoXY(1,22); Write('Enter the drive containing the old files: __'); End; Procedure GetDrive; Var Done: Boolean; Begin Done := false; Repeat Gotoxy(43,22); Read(Drive); If (length(Drive) = 2) AND (Drive[2] = ':') then Begin Done := true; End Else Begin Write(chr(7)); Gotoxy(52,22); Write('Bad Drive designator! '); Read(Kbd,Key); Gotoxy(43,22); Write('__'); ClrEOL; End; Until Done; Drive[1] := upcase(Drive[1]); Gotoxy(43,22); Write(Drive); Gotoxy(1,24); Write('Now, enter an asterisk to continue...any other key to abort: '); Read(Kbd,Key); If Key <> '*' then Begin Clrscr; Halt; End; Clrscr; End; Procedure GetCardRecord; Begin {$I-} Seek(Disk2,FilePointer); IOError; With Cardrec do Begin Read(Disk2,Cardrec); IOError; For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := XCardArray[Column,Row]; End; End; End; {$I+} End; Procedure SearchFiles; Var FirstArray, SecondArray: Array[1..4] of String[40]; FirstKey, SecondKey, XCopies: String[40]; Count, Copies, Code, FirstLen, SecondLen: Integer; HaltPrinter, KeyEntered, FirstFound, SecondFound: Boolean; Procedure WriteRecord; Begin {$I-} Gotoxy(1,24); Write('Copying from Old Record# ',FilePointer:4,' '); Write('to New Record# ',DFilePointer:4); Seek(Disk3,DFilePointer); IOError; With Keyrec do Begin Write(Disk3,Keyrec); IOError; End; Seek(Disk4,DFilePointer); IOError; With Cardrec do Begin Write(Disk4,Cardrec); IOError; End; Used := false; For Row := 1 to MaxKeys do Begin Temp := ''; For Column := 1 to MaxColumns do Begin Temp[Column] := ' ';  End; TagArray[Row] := Temp; End; For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := ' '; End; End; Seek(Disk1,FilePointer); IOError; With Keyrec do Begin For Row := 1 to MaxKeys do Begin XTagArray[Row] := TagArray[Row]; End; XUsed := Used; Write(Disk1,Keyrec); IOError; End; Seek(Disk2,FilePointer); IOError; With Cardrec do Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin XCardArray[Column,Row] := CardArray[Column,Row]; End; End; Write(Disk2,Cardrec); IOError; End; DFilePointer := (DFilePointer + 1); {$I+} If DFilePointer > 250 then Begin Clrscr; Writeln('This database is full. Try EXTRACTing to another.'); Halt; End; End; Procedure GetKeyWord; Var Temp: String[40]; I: Integer; Begin KeyEntered := true; Copies := 1; Clrscr; Writeln; Writeln('Enter first key word for search'); Writeln; Write('#1: '); Read(Temp); For I := 1 to length(Temp) do Temp[I] := upcase(Temp[I]); FirstLen := length(Temp); FirstKey := Temp; Writeln; Writeln; Writeln('Enter second key word for search ( to ignore )'); Writeln; Write('#2: '); Read(Temp); If Temp <> '' then Begin For I := 1 to length(Temp) do Temp[I] := upcase(Temp[I]); SecondLen := length(Temp); SecondKey := Temp; End Else Begin SecondKey := FirstKey; SecondLen := FirstLen; End; If (length(FirstKey) = 0) AND (length(SecondKey) = 0) then Begin  Clrscr; Writeln('You didn`t enter a key word. Rerun the program, and try again.'); Halt; End; Writeln; Writeln; Writeln('First key: ',FirstKey); Writeln('Second key: ',SecondKey); Writeln; Writeln; Writeln('Searching... '); End; Procedure CheckRecord; Var Count: Integer; Begin FirstFound := false; SecondFound := false; {$I-} Seek(Disk1,FilePointer); IOError; With Keyrec do Begin Read(Disk1,Keyrec); IOError; For Count := 1 to 4 do Begin FirstArray[Count] := XTagArray[Count]; SecondArray[Count] := XTagArray[Count]; TagArray[Count] := XTagArray[Count]; If Count > 1 then TagArray[Count] := copy(TagArray[Count],1,SecondaryKeyLen); FirstArray[Count] := copy(FirstArray[Count],1,FirstLen); SecondArray[Count] := copy(SecondArray[Count],1,SecondLen); If FirstArray[Count] = FirstKey then Begin FirstFound := true; End; End; Used := XUsed; End; If FirstFound then Begin For Count := 1 to 4 do Begin If SecondArray[Count] = SecondKey then SecondFound := true; End; End; End; Begin Repeat GetKeyWord; For FilePointer := 1 to (FileEndPointer-1) do Begin CheckRecord; If Used then Begin If SecondFound then Begin GetCardRecord; WriteRecord; End; End; End; Clrscr; Write(chr(7)); If SecondFound then Begin Writeln; Writeln('That`s All Folks...'); End Else Begin Writeln; Writeln('No such key match found... '); End; Writeln; Writeln('Enter "*" for another search, any other key to exit. '); Read(Kbd,Key); Until Key <> '*'; Clrscr; End; Procedure MakeNewFiles; Begin Assign(Disk3,'KEYLIST'); Rewrite(Disk3); IOError; With Keyrec do Begin For Row := 1 to MaxKeys do XTagArray[Row] := TagArray[Row]; XUsed := Used; Write(Disk3,Keyrec); IOError; End; IOError; Close(Disk3); Assign(Disk4,'CARDFILE'); Rewrite(Disk4); IOError; With Cardrec do Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin XCardArray[Column,Row] := CardArray[Column,Row]; End; End; Write(Disk4,Cardrec); IOError; End; Close(Disk4); IOError; Error := 0; End; Procedure InitFiles; Begin {$I-} Filename := concat(Drive,'KEYLIST'); Assign(Disk1,Filename); Reset(Disk1); IOError; Filename := concat(Drive,'CARDFILE'); Assign(Disk2,Filename); Reset(Disk2); IOError; FileEndPointer := filesize(Disk2); Assign(Disk3,'KEYLIST'); Reset(Disk3); Error := IOResult; Close(Disk3); If Error = 1 then MakeNewFiles; If Error <> 0 then Begin Clrscr; Write('Disk file problems'); Close(Disk1); Close(Disk2); Close(Disk3); Halt; End; Assign(Disk3,'KEYLIST'); Reset(Disk3); IOError; DFileEndPointer := filesize(Disk3); DFilePointer := DFileEndPointer; If DFilePointer > 249 then Begin Clrscr; Writeln('This database is full. Try EXTRACTing to another.'); Halt; End; Assign(Disk4,'CARDFILE'); Reset(Disk4); IOError; {$I+} End; Procedure Help; Begin End; Begin Screen; GetDrive; InitFiles; SearchFiles; Close(Disk1); Close(Disk2); Close(Disk3); Close(Disk4); Clrscr; End. otoxy((Column+XOffset),(Row+YOffset)); Write(CardArray[Column,Row]); End; End; End; FILE CARD DATABASE by Thomas R. Mierau 454 Carver N.W. Massillon, Ohio 44646 Copyright Thomas Mierau January 1985 Object Code Compiled With Turbo-Pascal (tm) Documentation by Rebecca Mierau This READ.ME file accompanied the origional version of the program. It may or may not reflect the the 1986 revision. INTRODUCTION File Card Database (FCD) combines the convenience of a text editor, a data base and hard copy on 4-by-6 file cards. It's perfect for storing recipes, quotes, and notes. The user has the choice of flipping through his file box for a card or retrieving the information from any of four tags (key words or headings) stored in his computer. Want to find Aunt Jane's recipe for tuna noodle? Call up tuna, noodle, casserole or Jane. Want any old casserole? Type in the word, and you have your choice of tuna noodle or goulash. Perhaps you're self-employed, a fix-it person. You want to know when you repaired Mr. Smith's drive but can't remember how you filed the information. You may have filed it under Jones, drive, concrete or patch. With FCD you can file it under all four tags and type any of these to recall the data. from the main menu prints an alphabetized list of key words to the screen or printer. FCD is a free-form data base. Instead of questions with space for 10-character answers, a "file card" is displayed on the screen. There are four lines for your key words and 10 for your text. Each line is 55 characters long. You enter and edit your data with a simple text editor. You'll find many applications for FCD. Because the program is on one disk and your data on another, you can  maintain a separate disk for each project. This allows for maximum storage space. Use and enjoy -- T.R.M. DOCUMENTATION (1.) Using PIP or your favorite file-transfer program, copy the following programs from your master disk to your working disk: (a.) MENU.COM (b.) NEWFILE.CHN (c.) MAINBODY.CHN (d.) RETRIEVE.CHN (e.) SORTFILE.CHN Label this disk, "File Card Database," and insert in the A: drive. (2.) Label a blank, formatted disk with the name of your data, place in the B: drive. (2.a.) Code used in this documentation: ^ = control <> = when typing a command or making an entry, type characters given between brackets. = return = escape (3.) Type to start program. (4.) The following menu should appear on your screen: : Create a new database : Add records to database : Access existing records : Display key words :Quit (5.) To initialize your disk, type option . This erases all previous data and creates a new data base. IMPORTANT If you use this once you have begun to collect data, you will lose your data. (6.) Type to enter new data. On the screen is a replica of a file card. Your cursor is on the first key word. You must work your way through the key words before writing text. It's a good idea to fill in all four key words for quick retrieval. (a.) Type key words (up to 55 characters) (b.) Backspace erases to the left (c.) When the word or phrase is as you want it, type (d.) Type the next word. You cannot back up to the previous key word, but there is an option at the end of editing that allows you to make corrections. (7.) When you have reach ed the rectangular "card," you have 10 lines of 55 characters for your text. You can write anywhere on the "card" that you desire by using the following commands: (a.) Arrow Keys: moves cursor in direction of arrow (b.) ^S: moves cursor left. (c.) ^D: moves cursor right (d.) ^E: moves cursor up (e.) ^X: moves cursor down (f.) ^A: moves cursor to left end of line (g.) ^F: moves cursor to right end of line (h.) ^R: moves cursor to beginning of file card (i.) ^C: moves cursor to end of file card (j.) ^I: or inserts a character (a blank space that moves all text to right one space). This allows you to insert letters and words. (k.) ^N: Insert a line at cursor and move text down one line. Cursor remains in original position. (If you have text on the bottom line of the card, it will be shoved off the "card" and deleted.) (8.) You can delete text by typing over it or using the following commands: (a.) : Deletes character to the left of cursor. Characters to right of cursor move left one space. (b.) ^Q: Deletes from cursor to end of line, leaving a blank line to right of cursor. (c.) ^Y: Deletes entire line, right and left of cursor. Cursor moves to left of line, and all text below moves up one line. A blank line is inserted at the bottom of the "card". (d.) ^Z: Wipe Out! This command erases card. (e.) < >, a blank space followed by , erases a keyword and leaves line blank (9.) When you are done making entries, type . In the lower right corner of the screen is the question, "Correct? (Y/N)" If you wish to correct key words or text type . (a.) Retype the ENTIRE key word that you wish to correct. (b.) Type return at any key word you don't want corrected. (c.) Correct text with commands given above. (10.) When your entries are correct type followed by a in response to "Correct?" (11.) On your screen is the question, "Enter another record? (Y/N)." For now, answer and enter the following exercise: (a.) Enter these four phrases on the four tag lines: File Card Database, Text Editor, Commands, Write (b.) Now on the "card" enter the editing commands listed above. (When printed this will be a handy reference card.) (c.) When all is entered type (d.) If correct, type . (If not follow instructions in item (9.)) (e.) Answer to "Enter another record?" (12.) You should be back at the main menu. We will continue this exercise by demonstrating reediting and printing. (13.) Type . The program will ask that you "Enter keyword for search." Type and your File Card Database card should appear on the screen. (Before continuing, the following facts about option should be noted. You can retrieve a record by typing anything from the first character to every character of a key word(s). The number of characters isn't a factor, nor is upper or lower case. Placing your characters in the right order is. For instance, if you type or or you'll find your record. But if you type or or you'll read the message, "No keyword found.") (14.) You'll note that when your "card" came to the screen this time, your cursor wasn't positioned at the first keyword. (a.) Type <^W> (b.) Move through the keywords by typing until your cursor is in the "card." (c.) To complete your command card, find a space and enter: ^W: write ^P: print : quit (d.) Type and if you are satisfied. (e.) If you have another record with the same keyword, this will be displayed on the screen. Type to return to the main menu. (f.) If you have no other records with the same keyword, you'll read the message, "That's all folks. Type any key to continue." Do so and you'll return to the menu. (15.) A few words about records sharing the same keyword: (a.) Typing any character, except , moves you from record to record. (b.) Typing returns you to the main menu. (16.) To print your FCD command card, type option from the main menu. (a.) Type in one of your four keywords. (b.) If you retrieve another record with the same keyword, type any character until your find "File Ca rd Database." (c.) When you have the correct record, load your printer with paper or a 4-by-6 card. (d.) Type <^P> and your commands will be printed. (e.) You'll either be returned to the main menu or given another record with the same keyword. (17.) If you are unhappy with the positioning of the record on your file card, reposition the card and try again. Margins have been figured into the print program, but where you place the card determines the results. (18.) As mentioned in the introduction, option on the main menu displays a list of keywords. You may have these listed to the screen or printer. When listing to the screen, you may stop and start the printing by typing <^S>. As always, returns you to the main menu, and a final returns you to C.P.M. # If you have any questions or problems, feel free to write. A self-addressed, stamped envelope for return mail is appreciated. T.R.M./R.M. for return mail is appreciated. åRINTER PAS €u$åRINTRECINC €~€åEAD0 INC €€åEADKEY INC €€€åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €�åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå Procedure GetCardRecord; Begin (* {$I-} *) Assign(Disk2,'B:CARDFILE'); Reset(Disk2); IOError; Seek(Disk2,FilePointer); IOError; With Cardrec do Begin Read(Disk2,Cardrec); IOError; For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := XCardArray[Column,Row]; End; End; End; Close(Disk2); IOError; {$I+} End; åAIL PQS €`&åAINBODYPAS €j€åENU PAS €n€åEWFILE PAS €s€åRINTER PAS €u$åRINTRECINC €~€åEAD0 INC €€åEADKEY INC €€€åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €�Procedure Help; Var KKey: Char; Begin Clrscr; GotoXY(32,1); Write('FILE CARD DATABASE'); GotoXY(33,3); Write('Editing Commands'); GotoXY(1,4); Write('--------------------------------------------------------------------------------'); GotoXY(1,5); Write('^S or ^H = Cursor Left * ^Y = Delete Line'); GotoXY(1,7); Write('^D or ^L = Cursor Right * ^Q = Delete to End of Line *'); GotoXY(1,9); Write('^E or ^K = Cursor up * ^Z = Delete Entire Field'); GotoXY(1,11); Write('^X or ^J = Cursor Down ^N = Insert Line'); GotoXY(1,13); Write('^A = Left End of Line ^R = Beginning of field'); GotoXY(1,15); Write('^F = Right End of Line ^C = End of Field'); GotoXY(1,17); Write('^I or = Insert Space at Cursor * = Quit *'); GotoXY(1,19); Write('Items marked with an asterisk (*) are available when entering key words'); GotoXY(1,20); Write('--------------------------------------------------------------------------------'); GotoXY(1,22); Write('Type any key to continue... '); Read(Kbd,KKey); Clrscr; DisplayScr; DisplayRec; Gotoxy((X+XOffset),(Y+YOffset)); End; åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €�,1); Write('FILE CARD DATABASE 4.6'); GotoXY(28,3); Write('Record Extraction Program'); GotoXY(1,4); Write('--------------------------------------------------------------------------------'); GotoXY(6,6); Write('This program EXTRACTs records from one database, deleting them from the'); GotoXY(1,7); Write('original, and puts them into another. It allows you to free up space in one'); GotoXY(1,8); Write('database without losing your valuble data. EXTRACT.COM must be Procedure Initvar; Begin Used := false; For Row := 1 to MaxKeys do Begin TagArray[Row] := ''; For Column := 1 to PrimaryKeyLen do Begin TagArray[Row] := concat(TagArray[Row],' '); End; End; For Row := 2 to 4 do TagArray[Row] := copy(TagArray[Row],1,18); For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := ' '; End; End; End;  search pattern.'); GotoXY(6,17); Write('If the database you are copying TO does not exist, it will be created anew.'); GotoXY(1,18); Write('If it already exists, the records will be ADDED to the existing file. This way,'); GotoXY(1,19); Write('you can make several passes through the old file, adding each pass to the new'); GotoXY(1,20); Write('file.'); GotoXY(1,22); Write('Enter the drive containing the old files: __'); End; Procedure GetDrive; Var Done: BProcedure Inputscr; Var Chrnum: Integer; TempKey: String[18]; Quit,Flag1, Flag2: Boolean; Begin DisplayScr; DisplayRec; Gotoxy(16,24); Write(FilePointer:4); Repeat ReadKey; EditScr; Gotoxy(60,24); Write('(^P to print)'); Gotoxy(28,24); Write('Is the above correct? (Y/N) '); Repeat Read(Kbd,Key); Key := upcase(Key); If Key = chr(16) then Begin Gotoxy(60,24); Write('Please wait...'); Write(chr(7)); PrintRecord; end; Until Key in['Y','N']; Write(Key); Delay(100); Gotoxy(28,24); ClrEOL; If Key = 'Y' then Begin Clrscr; End Else Begin Write(chr(7)); End; Until Key = 'Y'; End; olumns do Begin CardArray[Column,Row] := ' '; End; End; End; {File: INPUT.LIB} Procedure Input(PositionPtr, Y, Len: Integer); Var Line: Array[1..80] of Char; I, ArrayPtr, Marker: Integer; Ch: Char; Done: Boolean; Procedure Quit; Begin ExitFlag := true; Done := true; Exit; End; Procedure Left; Begin ArrayPtr := (ArrayPtr-1); If ArrayPtr < 1 THEN Begin ArrayPtr := 1; Write(chr(7)); End Else PositionPtr := (PositionPtr-1); Gotoxy(PositionPtr,Y); End; Procedure Right; Begin If ArrayPtr > (Len+1) then Begin Write(chr(7)); Exit; End; ArrayPtr := (ArrayPtr+1); If ArrayPtr > (Len+1) THEN Begin ArrayPtr := (Len+1); Write(chr(7)); End Else PositionPtr := (PositionPtr+1); If PositionPtr > 80 then Begin Write(chr(7)); ArrayPtr := (ArrayPtr-1); PositionPtr := 80; Write(chr(7)); End;  Gotoxy(PositionPtr,Y); End; Procedure Insert; Begin For I := Len Downto (ArrayPtr+1) do Line[I] := Line[(I-1)]; Line[ArrayPtr] := ' '; Marker := PositionPtr; For I := ArrayPtr to Len do Begin Gotoxy(Marker,Y); Write(Line[I]); Marker := (Marker+1); End; Gotoxy(PositionPtr,Y); End; Procedure Delete; Begin ArrayPtr := (ArrayPtr-1); If ArrayPtr < 1 THEN Begin ArrayPtr := 1; Write(chr(7)); Exit; End Else Begin PositionPtr := (PositionPtr-1); For I := ArrayPtr to (Len-1) do Line[I] := Line[(I+1)]; Line[Len] := ' '; End; Marker := PositionPtr; For I := ArrayPtr to (Len) do Begin Gotoxy(Marker,Y); Write(Line[I]); Marker := (Marker+1); End; Gotoxy(PositionPtr,Y); End; Procedure DeleteToEndOfLine; Begin Marker := PositionPtr; For I := ArrayPtr to (Len) do Begin Line[I] := ' '; Gotoxy(Marker,Y); Write(Line[I]); Marker := (Marker+1); End; Gotoxy(PositionPtr,Y); End; Procedure Copy; Begin If ArrayPtr > Len then Begin Write(chr(7)); Exit; End; If ord(Ch) < 32 then Exit; Line[ArrayPtr] := Ch; Gotoxy(PositionPtr,Y); Write(Line[ArrayPtr]); ArrayPtr := (ArrayPtr+1); If ArrayPtr > (Len+1) THEN Begin ArrayPtr := Len; Write(chr(7)); End Else PositionPtr := (PositionPtr+1); If PositionPtr > 80 then Begin ArrayPtr := (ArrayPtr-1); PositionPtr := 80; Write(chr(7)); End; Gotoxy(PositionPtr,Y); End; Begin Done := false; ArrayPtr := 1; If Len > 80 then Len := 80; For I := 1 to 80 do Line[I] := chr(32); For I := 1 to Length(Temporary) do Line[I] := Temporar y[I]; Repeat Gotoxy(PositionPtr,Y); Read(Kbd,Ch); Case Ch of #4: Right; #8: Left; #9: Insert; #12: Right; #13: Done := true; #17: DeleteToEndOfLine; #19: Left; #27: Quit; #127: Delete Else Copy; End; Until Done; Temporary := ''; For I := 1 to Len do Temporary := (Temporary + Line[I]); End; th Keyrec do Begin Read(Disk1,Keyrec); IOError; For Count := 1 to 4 do Begin FirstArray[Count] := XTagArray[Count]; SecondArray[Count] := XTagArray[Count]; TagArray[Count] := XTagArray[Count]; If Count > 1 then TagArray[Count] := copy(TagArray[Count],1,SecondaryKeyLen); FirstArray[Count] := copy(FirstArray[Count],1,FirstLen); SecondArray[Count] := copy(SecondArray[Count],1,SecondL Procedure Inputscr; Var Chrnum: Integer; TempKey: String[18]; Quit,Flag1, Flag2: Boolean; Begin Repeat ReadKey; EditScr; Gotoxy(60,24); Write('(^P to print)'); Gotoxy(28,24); Write('Is the above correct? (Y/N) '); Repeat Read(Kbd,Key); Key := upcase(Key); If Key = chr(16) then Begin Gotoxy(60,24); Write('Please wait...'); Write(chr(7)); PrintRecord; end; Until Key in['Y','N']; Gotoxy(28,24); ClrEOL; If Key = 'Y' then Begin Clrscr; End Else Begin Write(chr(7)); End; Until Key = 'Y'; End; FNPLOT CAL  úFNZPM CAL  ü€GROWTH CAL  þ€iGSA15A20CAL  €#Program INSTALL; { Installation Program for FILE CARD DATABASE 4.6 . This program selects the drive where the data files will be found. } Type XInstallRecord = Record XDrive: String[2]; End; Var Disk: File; DDisk: File of XInstallRecord; InstallRecord: XInstallRecord; Drive: String[2]; Key: Char; Procedure Screen; Begin Clrscr; GotoXY(30,1); Write('FILE CARD DATABASE 4.6'); GotoXY(31,3); Write('Installation Program'); GotoXY(1,4); Write('--------------------------------------------------------------------------------'); GotoXY(6,5); Write('Installation is simple. The only consideration is to select the disk drive'); GotoXY(1,6); Write('where the data files KEYLIST and CARDFILE may be found. Some situations may'); GotoXY(1,7); Write('require that the data files and the program set reside on the same disk. Others'); GotoXY(1,8); Write('may be better suited with the program set on one disk, and the data on another.'); GotoXY(1,9); Write('Single sided KAYPRO II computers will definately benefit from putting the data'); GotoXY(1,10); Write('on a diskette by itself.'); GotoXY(6,12); Write('User areas are not considered. The programs run from the logged drive/user'); GotoXY(1,13); Write('area and the data is put on the drive specified by this program. If, on a KAYPRO'); GotoXY(1,14); Write('10, you have the program set on the A7: portion of the hard disk, and you'); GotoXY(1,15); Write('specify the C: (floppy) drive for the data, it will be put onto the floppy disk'); GotoXY(1,16); Write('in user area 7. You must, of course be at the A7> prompt to run the program.'); GotoXY(6,18); Write('Enter below, the drive where you wish to keep the data files. Typical'); GotoXY(1,19); Write('examples would be B: or C: . Be sure to enter the colon! Entering only,'); GotoXY(1,20); Write('puts the data on the logged drive, along with the program set.'); GotoXY(1,22); Write('Enter data drive: __'); End; Procedure Install; Begin Drive := ''; Screen; Gotoxy(19,22); Read(Drive); Gotoxy(1,24); Write('Enter a n asterisk (*) to continue...any other key to abort: '); Read(Kbd,Key); If Key <> '*' then Begin Clrscr; Halt; End; Assign(DDisk,'INSTALL.DAT'); Rewrite(DDisk); With InstallRecord do Begin XDrive := Drive; Write(DDisk,InstallRecord); End; Close(DDisk); Writeln; Writeln; Writeln; Writeln; If Drive = '' then Begin Writeln('Data files will be on the LOGGED DRIVE...'); End Else Begin Writeln('Data files will be on the ',Drive,' DRIVE...'); End; Delay(4000); Clrscr; End; Begin Install; End.åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €� {File: IOERR.LIB} Procedure IOError; Var Disk: File; Num: Integer; IOErr: Boolean; Key: Char; Begin Num := 0; IOErr := false; Num := IOresult; IOErr := (Num <> 0); If IOErr then Begin Write(chr(7)); Clrscr; Gotoxy(20,12); Case Num of $01: Write('File does not exist'); $02: Write('File not open for input'); $03: Write('File not open for output'); $04: Write('File not open'); $05: Write('Can''t read from this file'); $06: Write('Can''t write to this file'); $10: Write('Error in numeric format'); $20: Write('Operation not allowed on a logical device'); $21: Write('Not allowed in the direct mode'); $22: Write('Assign to standard files not allowed'); $90: Write('Record length mismatch'); $91: Write('Seek beyond end of file'); $99: Write('Unexpected end of file'); $F0: Write('Disk write error'); $F1: Write('Directory is full'); $F2: Write('File size overflow'); $FF: Write('File dissappeared!'); Else Write('Unknown I/O Error: ',Num:3); End; Gotoxy(20,14); Write('Type any key to continue... '); Read(Kbd,Key); Assign(Disk,'MENU.COM'); Execute(Disk); End; End; åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €� insert in the A: drive. (2.) Label a blank, formatted disk with the name of your data, place in the B: drive. (2.a.) Code used in this documentation: ^ = control <> = when typing a command or making an entry, type characters given between brackets. = return = escape (3.) Type to start program. (4.) The following menu should appear on your screen: : Create a new datProgram MAINBODY; {$I VARIABLE.INC} (* Golbal variables for all programs *) {$I IOERR.INC} (* IOError *) {$I INITVAR.INC} (* Initvar *) {$I PRINTREC.INC} (* PrintRecord *) {$I DATASCR.INC} (* Displayscr *) {$I DISPLSCR.INC} (* Displayrec *) {$I INPUT.INC} (* Input(PositinPtr,Y,Len) *) {$I EDITSCR.INC} (* Editscr *) {$I READKEY.INC} (* ReadKey *) {$I HELPSCR.INC} (* Help *) Procedure Screen2; Begin Clrscr; Write(chr(7)); Writeln('DATABASE is FULL. Try deleting some records, or EXTRACTing some records to a'); Writeln('new database to make more room.'); Writeln; Writeln; Write('Type any key to continue... '); Read(Kbd,Key); Clrscr; Close(Disk1); IOError; Close(Disk2); IOError; Assign(Disk,'MENU.COM'); {$I+} Execute(Disk); End; Procedure ReadRecord0; Begin {$I-} Seek(Disk2,0); IOError; With CardRec do Begin Read(Disk2,CardRec); IOError; For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := XCardArray[Column,Row]; End; End; End; {$I+} End; Procedure WriteTagFile; Begin Used := true; {$I-} Seek(Disk1,FilePointer); IOError; With KeyRec do Begin For Row := 1 to MaxKeys do Begin XTagArray[Row] := TagArray[Row]; End; XUsed := Used; Write(Disk1,Keyrec); IOError; End; {$I+} End; Procedure WriteCardFile; Begin {$I-} Seek(Disk2,FilePointer); IOError; With CardRec do Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin XCardArray[Column,Row] := CardArray[Column,Row]; End; End; Write(Disk2,CardRec); IOError; End; {$I+} End; Procedure Addrecords; Var YCardArray: Array[1..55,1..16] of Char; MaxFiles: Integer; Procedure CopyData; Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin YCardArray[Column,Row] := CardArray[Column,Row]; End; End; End; Procedure RetrieveData; Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := YCardArray[Column,Row]; End; End; End; Procedure HandleData; Var Flag, KeyFlag: Boolean; {$I INPUTSCR.INC} Begin Flag := false; Repeat InitVar; RetrieveData; DisplayScr; DisplayRec; Inputscr; WriteTagFile; WriteCardFile; FilePointer := (FilePointer+1); If FilePointer > 250 then Screen2; Clrscr; Write('Enter another record? (Y/N) '); Keyflag := false; Repeat Read(Kbd,Key); Key := upcase(Key); If Key = ('N') then Begin Keyflag := true; Flag := true;  End; If Key = ('Y') then Keyflag := true; Until Keyflag; Until flag; End; Begin PrintInit := false; MaxFiles := 250; ReadRecord0; CopyData; HandleData; Clrscr; Close(Disk1); Close(Disk2); Assign(Disk,'MENU.COM'); Execute(Disk); End; Begin {$I-} Filename := concat(Drive,'KEYLIST'); Assign(Disk1,Filename); Reset(Disk1); IOError; Filename := concat(Drive,'CARDFILE'); Assign(Disk2,Filename); Reset(Disk2); IOError; FileEndPointer := filesize(Disk2); FilePointer := FileEndPointer; If FilePointer > 250 then Screen2; AddRecords; Close(Disk1); IOError; Close(Disk2); IOError; Assign(Disk,'MENU.COM'); IOError; {$I+} Execute(Disk); End. åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €�Program MENU; {This menu is written for the File Card Database.} {$I VARIABLE.INC} Procedure MainMenu; Var Disk: File; Inkey: Char; A, B, X, Y: Integer; Line: String[80]; Flag, LFlag: Boolean; Procedure DrawMainMenu; Forward; {$I IOERR.INC} Procedure CenterText; Begin A := length(Line); B := 80 - A; X := B div 2; Gotoxy(X,Y); Write(Line); End; Procedure GetDrive; Begin {$I-} Assign(DDisk,'INSTALL.DAT'); Reset(DDisk); IOError; With InstallRecord do Begin Read(DDisk,InstallRecord); IOError; Drive := XDrive; End; Close(DDisk); IOError; {$I+} End; Procedure DrawAltMenu; Begin Clrscr; Y := 2; Line := ('FILE CARD DATABASE'); CenterText; Y := 6; Line := ('Options Menu'); CenterText; Writeln; For A := 1 to 80 do Begin Write('-'); End; Y := 12; Line := ('<1> Display Key Words'); CenterText; Y := 14; Gotoxy(X,Y); Write('<2> Reuse Deleted Records'); Y := 16; Gotoxy(X,Y); Write('<3> Create a Template'); Y := 18; Gotoxy(X,Y); Write('<4> Erase the Entire Database'); Y := 20; Gotoxy(X,Y); Write(' Return to the Main Menu'); Gotoxy(60,22); Write('Please select: '); End; Procedure AlternateMenu; Procedure SecondChoice; Begin LFlag := false; Repeat Gotoxy(75,22); Read(Kbd,Inkey); Inkey := upcase(Inkey); If Inkey = chr(27) then Begin DrawMainMenu; LFlag := true; End; If Inkey = '1' then Begin Clrscr; {$I-} Assign(Disk,'SORTFILE.CHN'); Chain(Disk); IOError; {$I+} End; If Inkey = '2' then Begin Clrscr; {$I-} Assign(Disk,'UNDELETE.CHN'); Chain(Disk); IOError; {$I+} End; If Inkey = '3' then Begin Clrscr; {$I-} Assign(Disk,'TEMPLATE.CHN'); Chain(Disk); IOError; {$I+} End; If Inkey = '4' then Begin Clrscr; Writeln('WARNING: This subprogram erases all existing data from the database.'); Writeln('use only if you wish to start a new database.'); Writeln; Writeln; Write('Type "*" to continue...any other key to abort: '); Read(Kbd,Inkey); If Inkey = '*' then Begin {$I-} Assign(Disk,'NEWFILE.CHN'); Chain(Disk); IOError; {$I+} End; Inkey := chr(0); DrawAltMenu; End; Until LFlag; End; Begin DrawAltMenu; SecondChoice; End; Procedure DrawMainMenu; Begin Clrscr; Y := 2; Line := ('FILE CARD DATABASE ver 4.6'); CenterText; Y := 4; Line := ('(c) 1986 by'); CenterText; Y := 6; Line := ('Thomas R. Mierau'); Centertext; Y := 8; Line := ('*** MAIN MENU ***'); CenterText; Writeln; For A := 1 to 80 do Begin Write('-'); End; Y := 12; Line := (' Add Records to the Database'); CenterText; Y := 14; Gotoxy(X,Y); Write(' Retrieve Existing Records'); Y := 16; Gotoxy(X,Y); Write(' Print Cards'); Y := 18; Gotoxy(X,Y); Write(' Other Options'); Y := 20; Gotoxy(X,Y); Write(' Quit'); Gotoxy(60,22); Write('Please select: '); End; Procedure FirstChoice; Begin Flag := false; Repeat Gotoxy(75,22); Read(Kbd,Inkey); Inkey := upcase(Inkey); If Inkey = chr(27) then Flag := true; If Inkey = 'A' then Begin Clrscr; {$I-} Assign(Disk,'MAINBODY.CHN'); Chain(Disk); IOError; {$I+} End; If Inkey = 'B' then Begin  Clrscr; {$I-} Assign(Disk,'RETRIEVE.CHN'); Chain(Disk); IOError; {$I+} End; If Inkey = 'C' then Begin Clrscr; {$I-} Assign(Disk,'PRINTER.CHN'); Chain(Disk); IOError; {$I+} End; If Inkey = 'D' then Begin AlternateMenu; End; Until Flag; Clrscr; End; Begin GetDrive; DrawMainmenu; FirstChoice; End; Procedure Help; Begin End; Begin MainMenu; End.åAIL PQS €`&åAINBODYPAS €j€åENU PAS €n€åEWFILE PAS €s€åRINTER PAS €u$åRINTRECINC €~€åEAD0 INC €€åEADKEY INC €€€åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €�Program NEWFILE; {$I VARIABLE.INC} {$I IOERR.INC} {$I INITVAR.INC} Procedure CreateKeyFile; Begin {$I-} Filename := concat(Drive,'KEYLIST'); Assign(Disk1,Filename); Rewrite(Disk1); IOError; With Keyrec do Begin For Row := 1 to MaxKeys do XTagArray[Row] := TagArray[Row]; XUsed := Used; Write(Disk1,Keyrec); IOError; End; Close(Disk1); IOError; {$I+} End; Procedure CreateCardfile; Begin {$I-} Filename := concat(Drive,'CARDFILE'); Assign(Disk2,Filename); Rewrite(Disk2); IOError; With Cardrec do Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin XCardArray[Column,Row] := CardArray[Column,Row]; End; End; Write(Disk2,Cardrec); IOError; End; Close(Disk2); IOError; {$I+} End; Procedure Help; Begin End; Begin Clrscr; InitVar; Writeln; Writeln('Creating: KEYLIST...'); CreateKeyFile; Writeln; Writeln('Creating: CARDFILE...'); CreateCardFile; Write(chr(7)); Writeln; Writeln('Done...Returning to the Main Menu.'); {$I-} Assign(Disk,'MENU.COM'); IOError; {$I+} Execute(Disk); End.åETRIEVEPAS €‚€åETCARD INC €ŠåORTFILEPAS €‹€åEMPLATEPAS €�ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååProgram PRINTER; {$I VARIABLE.INC} (* Golbal variables for all programs *) {$I IOERR.INC} (* IOError *) {$I INITVAR.INC} (* Initvar *) {$I DATASCR.INC} (* Displayscr *) {$I DISPLSCR.INC} (* Displayrec *) Procedure Finish; Begin Clrscr; Close(Disk1); Close(Disk2); Assign(Disk,'MENU.COM'); Execute(Disk); End; Procedure Test; Var Num: Byte; Begin Num := Port[05]; If Num = 27 then Finish; End; Procedure GetCardRecord; Begin {$I-} Seek(Disk2,FilePointer); IOError; With Cardrec do Begin Read(Disk2,Cardrec); IOError; For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := XCardArray[Column,Row]; End; End; End; {$I+} If Keypressed then Test; End; Procedure SearchFiles; Var FirstArray, SecondArray: Array[1..4] of String[40]; FirstKey, SecondKey, XCopies: String[40]; Count, Copies, Code, FirstLen, SecondLen: Integer; HaltPrinter, KeyEntered, FirstFound, SecondFound: Boolean; Procedure Screen1; Begin Clrscr; GotoXY(32,1); Write('FILE CARD DATABASE'); GotoXY(31,3); Write('Card Printing Option'); GotoXY(1,4); Write('--------------------------------------------------------------------------------'); GotoXY(6,6); Write('This option will print either the entire database, or cards selected by key'); GotoXY(1,7); Write('words. You will be asked for key words to search on. If you respond to the first'); GotoXY(1,8); Write('prompt only, you will print all cards which contain at least one key that'); GotoXY(1,9); Write('matches your entry. If you respond to both prompts, you will print only the'); GotoXY(1,10); Write('records that contain both keywords. You may enter two key words in either order.'); GotoXY(1,11); Write('If you skip both prompts with you will print the entire file.'); GotoXY(6,13); Write('Additionally, you will be asked how many copies of each card you wish to'); GotoXY(1,14); Write('have printed. Enter the number followed by . If you enter only, the'); GotoXY(1,15); Write('program will assume one (1) copy of each card.'); GotoXY(5,17); Write('Finally, you will be asked whether or not you wish to halt the printer after'); GotoXY(1,18); Write('each card, so that you can manually insert file cards into your printer as the'); GotoXY(1,19); Write('file is printed. Enter a "Y" or "N". Upper or lower case will do. If you enter'); GotoXY(1,20); Write('"N", your printer must be filled with continuous-form cards, as the printer will'); GotoXY(1,21); Write('not stop. Even if you answer "Y" to this question, you MUST have a card in the'); GotoXY(1,22); Write('printer, ready to go, before you respond with your "Y" or "N".'); GotoXY(1,23); Write('( will interrupt the print option)'); GotoXY(52,24); Write('Type any key to continue...'); Read(Kbd,Key); If Key = #27 then Finish; Clrscr; End; Procedure PrintRec; Var A: Integer; Begin If HaltPrinter then Begin Write(chr(7)); Gotoxy(1,24); Write('Type any key... '); Read(Kbd,Key); If key = #27 then Finish; End; Gotoxy(60,24); Write('PRINTING '); Writeln(Lst); If Keypressed then Test; Writeln(Lst); If Keypressed then Test; Write(Lst,' '); If Keypressed then Test; Writeln(Lst,TagArray[1]); If Keypressed then Test; Write(Lst,' '); If Keypressed then Test; For A := 1 to MaxColumns do Begin Write(Lst,'='); If Keypressed then Test; End; Writeln(Lst); If Keypressed then Test; For Row := 1 to MaxRows do Begin Write(Lst,' '); For Column := 1 to MaxColumns do Begin Write(Lst,CardArray[Column,Row]); End; Writeln(Lst); If Keypressed then Test; End; Write(Lst,' '); If Keypressed then Test; For A := 1 to (MaxColumns + 1) do Write(Lst,'-'); If Keypressed then Test; Writeln(Lst); If Keypressed then Test; Write(Lst,' '); If Keypressed then Test; Write(Lst,TagArray[2]); If Keypressed then Test; Write(lst,' |'); If Keypressed then Test; Write(Lst,TagArray[3]); If Keypressed then Test; Write(Lst,' |'); If Keypressed then Test; Writeln(Lst,TagArray[4]); If Keypressed then Test; Writeln(Lst); If Keypressed then Test; Writeln(Lst); If Keypressed then Test; Gotoxy(1,24); ClrEOL; End; Procedure GetKeyWord; Var Temp: String[40]; I: Integer; Begin KeyEntered := true; Copies := 1; Clrscr; Writeln; Writeln('Enter first key word for search'); Writeln; Write('#1: '); Read(Temp); For I := 1 to length(Temp) do Temp[I] := upcase(Temp[I]); FirstLen := length(Temp); FirstKey := Temp; Writeln; Writeln; Writeln('Enter second key word for search ( to ignore )'); Writeln; Write('#2: '); Read(Temp); If Temp <> '' then Begin For I := 1 to length(Temp) do Temp[I] := upcase(Temp[I]); SecondLen := length(Temp); SecondKey := Temp; End Else Begin SecondKey := FirstKey; SecondLen := FirstLen; End; If (length(FirstKey) = 0) AND (length(SecondKey) = 0) then KeyEntered := false; Writeln; Writeln; Writeln('First key: ',FirstKey); Writeln('Second key: ',SecondKey); Writeln; Write('How many copies of each card? ( = 1 ) '); Read(XCopies); val(XCopies,Copies,Code); Writeln; Writeln; Write('Halt the printer after each card? (Y/N) '); Repeat Read(Kbd,Key); Key := upcase(Key); Until Key in['Y','N']; If Key = 'Y' then HaltPrinter := true Else HaltPrinter := false; Writeln; Writeln; Writeln('Searching... '); End; Procedure CheckRecord; Var Count: Integer; Begin FirstFound := false; SecondFound := false; {$I-} Seek(Disk1,FilePointer); IOError; With Keyrec do Begin Read(Disk1,Keyrec); IOError; For Count := 1 to 4 do Begin FirstArray[Count] := XTagArray[Count]; SecondArray[Count] := XTagArray[Count]; TagArray[Count] := XTagArray[Count]; If Count > 1 then TagArray[Count] := copy(TagArray[Count],1,SecondaryKeyLen); FirstArray[Count] := copy(FirstArray[Count],1,FirstLen); SecondArray[Count] := copy(SecondArray[Count],1,SecondLen); If FirstArray[Count] = FirstKey then Begin FirstFound := true; End; End; Used := XUsed; End; If FirstFound then Begin For Count := 1 to 4 do Begin If SecondArray[Count] = SecondKey then SecondFound := true; End; End; If Keypressed then Test; End; Begin Screen1; Repeat GetKeyWord; Displayscr; For FilePointer := 1 to (FileEndPointer-1) do Begin CheckRecord; If Used then Begin If SecondFound then Begin If Keypressed then Test; GetCardRecord; If Keypressed then Test; DisplayRec; For Count := 1 to copies do  Begin If Keypressed then Test; Printrec; End; End; End; End; Clrscr; Write(chr(7)); If SecondFound then Begin Writeln; Writeln('That`s All Folks...'); End Else Begin Writeln; Writeln('No such key match found... '); End; Writeln; Writeln('Enter "*" for another search, any other key to exit. '); Read(Kbd,Key); Until Key <> '*'; Clrscr; End; Procedure Help; Begin End; Begin {$I-} Filename := concat(Drive,'KEYLIST'); Assign(Disk1,Filename); Reset(Disk1); IOError; Filename := concat(Drive,'CARDFILE'); Assign(Disk2,Filename); Reset(Disk2); IOError; FileEndPointer := filesize(Disk2); {$I+} SearchFiles; Close(Disk1); Close(Disk2); Assign(Disk,'MENU.COM'); Execute(Disk); End. Procedure PrintRecord; Var A: Integer; Begin Write(chr(7)); Gotoxy(60,24); Write('PRINTING '); Writeln(Lst); Writeln(Lst); Write(Lst,' '); Writeln(Lst,TagArray[1]); Write(Lst,' '); For A := 1 to MaxColumns do Write(Lst,'='); Writeln(Lst); For Row := 1 to MaxRows do Begin Write(Lst,' '); For Column := 1 to MaxColumns do Begin Write(Lst,CardArray[Column,Row]); End; Writeln(Lst); End; Write(Lst,' '); For A := 1 to (MaxColumns + 1) do Write(Lst,'-'); Writeln(Lst); Write(Lst,' '); Write(Lst,TagArray[2]); Write(lst,' |'); Write(Lst,TagArray[3]); Write(Lst,' |'); Writeln(Lst,TagArray[4]); Writeln(Lst); Writeln(Lst); Gotoxy(60,24); ClrEOL; End; Procedure ReadRecord0; Begin {$I-} Seek(Disk2,0); IOError; With CardRec do Begin Read(Disk2,CardRec); IOError; For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := XCardArray[Column,Row]; End; End; End; IOError; {$I+} End;INSTALL PAS /€ IOERR INC 2€MAINBODYPAS 4€MENU PAS 8€05: Write('Can''t read from this file'); $06: Write('Can''t write to this file'); $10: Write('Error in numeric format'); $20: Write('Operation not allowed on a logical device'); $21: Write('Not allowed in the direct mode'); $22: Write('Assign to standard files not allowed'); $90: Write('Record length mismatch'); $91: Write('Seek beyond end of file'); $99: Write('Unexpected end of file'); $F0: Write('Disk writProcedure ReadKey; Var I: Integer; Begin ExitFlag := false; Temporary := (TagArray[1]); Input(13,3,40); For I := 1 to 80 do Temporary[I] := upcase(Temporary[I]); TagArray[1] := Temporary; Gotoxy(13,3); Write(TagArray[1]); ExitFlag := false; Temporary := (TagArray[2]); Input(12,22,SecondaryKeyLen); If ExitFlag then Begin Gotoxy(12,22); Write(TagArray[2]); Exit; End; For I := 1 to 80 do Temporary[I] := upcase(Temporary[I]); TagArray[2] := Temporary; TagArray[2] := copy(TagArray[2],1,SecondaryKeyLen); Gotoxy(12,22); Write(TagArray[2]); Temporary := (TagArray[3]); Input(31,22,SecondaryKeyLen); If ExitFlag then Begin Gotoxy(31,22); Write(TagArray[3]); Exit; End; For I := 1 to 80 do Temporary[I] := upcase(Temporary[I]); TagArray[3] := Temporary; TagArray[3] := copy(TagArray[3],1,SecondaryKeyLen); Gotoxy(31,22); Write(TagArray[3]); Temporary := (TagArray[4]); Input(50,22,SecondaryKeyLen); If ExitFlag then Begin Gotoxy(50,22); Write(TagArray[4]); Exit; End; For I := 1 to 80 do Temporary[I] := upcase(Temporary[I]); TagArray[4] := Temporary; TagArray[4] := copy(TagArray[4],1,SecondaryKeyLen); Gotoxy(50,22); Write(TagArray[4]); End; INSTALL PAS /€ IOERR INC 2€MAINBODYPAS 4€MENU PAS 8€(ñíÉ d!kÃ6!{Ã6Í`æÍ`o&Éô  áÁå:Ý·(ÕÅÍ |µ(Íâþ ÍâþÊÕ ÁÑ*é"Òx2Ýy·( >Ã28!ü"9!¦ í°!¾¸ í°¯og2Ð"Ô"Ö>~2Ñ2àÉÃÃ!Ã:Ã0Ã5Ã+Ã:Ã!Á‚CÄÅÁÅÕåÝåýåõo&åͦñýáÝááÑÁÉÅÕåÝåýåÍ£}ëÿ í[Òþ (ú!eÍ|ͧþA8þQ0Gþ: xÖ@¯!\w# (̓ þ?(þ*( þ.( ÍxÍ_þ. Í_!h6#ûÉ (þ?( þ*( ̓( w#éÉ>?> w#üÉͧþ 8 åÅ!™í±ÁáÉ¿É .,;:=?*[]<>{}þaØþ{ÐÖ É|͵}õ;ñæÆ�'Î@'Ãʯ7Ë|À|·}È>ÿÉ2ØÅͰÁ*·íBÚ© ëÑùü "Ưog"Î2Ü>Ã2Ù!ßProgram RETRIEVE; {$I VARIABLE.INC} (* Golbal variables for all programs *) {$I IOERR.INC} (* IOError *) {$I INITVAR.INC} (* Initvar *) {$I PRINTREC.INC} (* PrintRecord *) {$I DATASCR.INC} (* Displayscr *) {$I DISPLSCR.INC} (* Displayrec *) {$I INPUT.INC} (* Input(PositinPtr,Y,Len) *) {$I EDITSCR.INC} (* Editscr *) {$I READKEY.INC} (* ReadKey *) {$I HELPSCR.INC} (* Help *) Procedure GetCardRecord; Begin {$I-} Seek(Disk2,FilePointer); IOError; With Cardrec do Begin Read(Disk2,Cardrec); IOError; For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin CardArray[Column,Row] := XCardArray[Column,Row]; End; End; End; {$I+} End; Procedure WriteTagFile; Begin Used := true; {$I-} Seek(Disk1,FilePointer); IOError; With KeyRec do Begin For Row := 1 to MaxKeys do Begin XTagArray[Row] := TagArray[Row]; End; XUsed := Used; Write(Disk1,Keyrec); IOError; End; {$I+} End; Procedure WriteCardFile; Begin {$I-} Seek(Disk2,FilePointer); IOError; With CardRec do Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin XCardArray[Column,Row] := CardArray[Column,Row]; End; End; Write(Disk2,CardRec); IOError; End; {$I+} End; Procedure Inputscr; Var Chrnum: Integer; TempKey: String[18]; Quit,Flag1, Flag2: Boolean; Begin Repeat ReadKey; EditScr; Gotoxy(28,24); Write('Is the above correct? (Y/N) '); Repeat Read(Kbd,Key); Key := upcase(Key); Until Key in['Y','N']; Until Key = 'Y'; End; Procedure SearchFiles; Var FirstArray, SecondArray: Array[1..4] of String[40]; FirstKey, SecondKey: String[40]; FirstLen, SecondLen:  Integer; KeyEntered, FirstFound, SecondFound: Boolean; Procedure GetKeyWord; Var Temp: String[40]; I: Integer; Begin KeyEntered := true; Clrscr; Writeln; Writeln('Enter first key word for search'); Writeln; Write('#1: '); Read(Temp); For I := 1 to length(Temp) do Temp[I] := upcase(Temp[I]); FirstLen := length(Temp); FirstKey := Temp; Writeln; Writeln; Writeln('Enter second key word for search ( to ignore )'); Writeln; Write('#2: '); Read(Temp); If Temp <> '' then Begin For I := 1 to length(Temp) do Temp[I] := upcase(Temp[I]); SecondLen := length(Temp); SecondKey := Temp; End Else Begin SecondKey := FirstKey; SecondLen := FirstLen; End; If (length(FirstKey) = 0) AND (length(SecondKey) = 0) then KeyEntered := false; Writeln; Writeln;  Writeln; Writeln; Writeln('First key: ',FirstKey); Writeln('Second key: ',SecondKey); Writeln; Writeln; Writeln; Writeln('Searching... '); End; Procedure CheckRecord; Var Count: Integer; Begin FirstFound := false; SecondFound := false; {$I-} Seek(Disk1,FilePointer); IOError; {$I+} With Keyrec do Begin {$I-} Read(Disk1,Keyrec); IOError; {$I+} For Count := 1 to 4 do Begin FirstArray[Count] := XTagArray[Count]; SecondArray[Count] := XTagArray[Count]; TagArray[Count] := XTagArray[Count]; If Count > 1 then TagArray[Count] := copy(TagArray[Count],1,SecondaryKeyLen); FirstArray[Count] := copy(FirstArray[Count],1,FirstLen); SecondArray[Count] := copy(SecondArray[Count],1,SecondLen); If FirstArray[Count] = FirstKey then  Begin FirstFound := true; End; End; Used := XUsed; End; If FirstFound then Begin For Count := 1 to 4 do Begin If SecondArray[Count] = SecondKey then SecondFound := true; End; End; End; Procedure DeleteRecord; Begin Initvar; Clrscr; Gotoxy(34,12); Write('DELETING... '); Used := false; {$I-} Seek(Disk1,FilePointer); IOError; With KeyRec do Begin For Row := 1 to MaxKeys do Begin XTagArray[Row] := TagArray[Row]; End; XUsed := Used; Write(Disk1,Keyrec); IOError; End; {$I+} Used := true; WriteCardFile; Displayscr; Displayrec; End; Begin Repeat GetKeyWord; If KeyEntered then Begin For FilePointer := 1 to (FileEndPointer-1) do Begin CheckRecord;  If Used then Begin If SecondFound then Begin GetCardRecord; DisplayScr; DisplayRec; Repeat Gotoxy(1,24); Write('^D=Delete ^P=Print ^W=Write =Next =Quit '); Read(Kbd,Key); Case Key of #4: Begin Write(Chr(7)); Gotoxy(60,24); Write('Delete? (Y/N) '); Repeat Read(Kbd,Key); Key := upcase(Key); Until Key in['Y','N']; If Key = 'Y' then DeleteRecord; Gotoxy(60,24); ClrEOL; End;  #16: Begin PrintRecord; End; #23: Begin Gotoxy(1,24); ClrEOL; InputScr; WriteTagFile; WriteCardFile; End; #27: Begin Clrscr; Close(Disk1); Close(Disk2); Assign(Disk,'MENU.COM'); Execute(Disk); End; End; Until (Key = #13) OR (Key = #32); Clrscr; End; End; End; End; Write(chr(7)); If SecondFound then Begin Writeln('That`s All Folks...'); End;  If NOT KeyEntered then Begin Writeln('No Key word entered...'); End; Writeln; Write('Enter "*" for another search, any other key to quit. '); Read(Kbd,Key); Until Key <> '*'; Clrscr; End; Begin {$I-} Filename := concat(Drive,'KEYLIST'); Assign(Disk1,Filename); Reset(Disk1); IOError; Filename := concat(Drive,'CARDFILE'); Assign(Disk2,Filename); Reset(Disk2); IOError; FileEndPointer := filesize(Disk2); {$I+} SearchFiles; Close(Disk1); Close(Disk2); Assign(Disk,'MENU.COM'); Execute(Disk); End.EXTRACT PAS €/FILECARDNOT )GETCARD INC %€HELPSCR INC &€INITVAR INC (INPSCR INC )€INPUT INC *INPUTSCRINC .€INSTALL PAS /€ IOERR INC 2€MAINBODYPAS 4€MENU PAS 8€Procedure SetCardFile; Begin {$I-} Filename := concat(Drive,'CARDFILE'); Assign(Disk2,Filename); Reset(Disk2); IOError; FileEndpointer := Filesize(Disk2); {$I+} End; INITVAR INC (INPSCR INC )€INPUT INC *INPUTSCRINC .€INSTALL PAS /€ IOERR INC 2€MAINBODYPAS 4€MENU PAS 8€!Í«ÍÎÍ !¼Í»!ñÍ;!Í«ÍÎÍ !¼Í»!ÊðÍ;!Í«ÍÎÍ !¼Í»ÍÎÍ ÉÍœÍÎÍ Íœ!Í#!pÍ#Í» How many copies do you require ?!Í#!qÍ#Í !dïÍÌÍOÍ !å*dïÑÍgz³ÊÀ'Õ"fïÍd&*fï#Ñë'ÉÍ?!jïåÍN MAILFILE.DATÍq!jï=ÍÍ ÍK&!jïÍJËEÊç'!jïÍ{Í ÍœÍÎÍ ÍœÍ» !Í#!pÍ#Í»Hit CARRIAGE RETURN....!Í#!qÍ#ÍÎÍ !³òÍÌÍEÍ ÉÍ?͜ͻ5This program will print standard 102mm * 36mm labels ÍÎÍ ÍœÍÎÍ ÍœÍ»4The print out is spaced for a printer setting ofÍÎÍ ÍœÍ»46 lineProgram Sortfile; (* This program sorts and displays all of the keywords in the file KEYLIST. *) {$I VARIABLE.INC} {$I IOERR.INC} Procedure PrintKeys; Var Keylist: Array[0..1000] of String[18]; Keyword: Array[1..4] of String[40]; KeyWord1, Tempword, Testword: String[40]; PrimeCount, Pointer, FilePointer, EndOfFile, EndOfArray, SubPointer, I, X, Y, Z: Integer; Check, Key: Char; Used, Flag1, Flag2, Flag3: Boolean; Procedure Init; Begin PrimeCount := 0; FilePointer := 1; EndOfFile := 0; EndOfArray := 0; Pointer := 0; SubPointer := 0; I := 0; Clrscr; End; Procedure ReadFile; Begin {$I-} Write('Reading in key list file... '); Filename := concat(Drive,'KEYLIST'); Assign(Disk1,Filename); Reset(Disk1); IOError; EndOfFile := Filesize(Disk1); For FilePointer := 1 to (EndOfFile-1) do Begin Seek(Disk1,FilePointer); IOError; With Keyrec do Begin Read(Disk1,Keyrec); IOError; For Z := 1 to 4 do Begin KeyWord[Z] := XTagArray[Z]; End; Used := XUsed; End; If Used then Begin For Z := 1 to 4 do Begin EndOfArray := (EndOfArray+1); Keylist[EndOfArray] := KeyWord[Z]; End; End; End; Close(Disk1); {$I+} Writeln(EndOfArray,' Key words.'); End; Procedure MakeSpace; Begin For I := Pointer downto (Subpointer+1) do Begin Keylist[I] := Keylist[(I-1)]; End; Keylist[SubPointer] := Tempword; End; Procedure PurgeWord; Begin EndOfArray := (EndOfArray-1); For I := Pointer to EndOfArray do Begin Keylist[I] := KeyList[(I+1)]; End; Pointer := (Pointer-1); End; Procedure SortFile; Begin Writeln; Write('Sorting list and purging duplicates... '); Keylist[0] := Keylist[1]; Pointer := 1; Flag1 := false; Repeat SubPointer := 0; Pointer := (Pointer+1); Tempword := Keylist[Pointer]; Check := copy(Tempword,1,1); Repeat Flag2 := false; Testword := Keylist[Subpointer]; If not Flag2 then Begin If Tempword < Testword then Begin Flag1 := true; Flag2 := true; MakeSpace; End; End; If not Flag2 then Begin If Tempword = Testword then Begin Flag1 := true; Flag2 := true; PurgeWord; End; End; If not Flag2 then Begin If Check = (' ') then Begin Flag1 := true; Flag2 := true; PurgeWord; End; End; If not Flag2 then Begin SubPointer := (SubPointer+1); If SubPointer = (Pointer-1) then Begin Flag1 := true; Keylist[Subpointer] := Tempword; SubPointer := 0; End; End; Until Flag1; Flag1 := false; Until Pointer = EndOfArray; End; Procedure ShiftOut; Begin Writeln(EndOfArray,' Sorted words'); For I := EndOfArray downto 1 do Begin Keylist[I] := Keylist[(I-1)]; End; End; Procedure PrintList; Var C, P: Integer; Begin C := ConOutPtr; P := LstOutPtr; Flag3 := false; Repeat Gotoxy(1,5); Write('Output to Screen or Printer? '); Read(Kbd,Key); Key := upcase(Key); If Key = 'S' then Begin Flag3 := true; End; If Key = 'P' then Begin Flag3 := true; ConOutPtr := P; End; Until Flag3; Writeln; Writeln; For I := 1 to EndOfArray do Begin Writeln(Keylist[I]); End; Write(chr(12)); ConOutPtr := C; Writeln; Writeln; Repeat Gotoxy(1,24); Write('Type to continue... '); Read(Kbd,Key); Until Key = (chr(27)); Clrscr; Assign(Disk,'MENU.COM'); Execute(Disk); End; Begin Init; Readfile; Sortfile; ShiftOut; PrintList; End; Procedure Help; Begin End; Begin PrintKeys; End. INSTALL PAS /€ IOERR INC 2€MAINBODYPAS 4€MENU PAS 8€ ?ÍÎÍ ÍœÍÎÍ ÍœÍ»+2. DO YOU WISH TO ACCESS AN EXISTING FILE ?ÍÎÍ ÍœÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í»9YOU MUST ANSWER AS QUESTION 1 ON YOUR FIRST ATTEMPT !!!!!!Í#!qÍ#ÍÎÍ ÍœÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#Í !ºÍª!¶òÍEÍ *¶ò&Íå}2¶ò*¶ò&å!1ÑÍ€ËEÊ,<ÍÀ6*¶ò&å!2ÑÍ€ËEÊA<Í®%É!"hï!}2¸òÍò"hï*hïå!ÑÍ“}2¸ò*¸ò&ËEÊÂ=Íœ!Í#Í Í?! å! ÍÜ*hï™·íRÂù = Quit } '); Repeat Read(Kbd,ZKey); ZKey := upcase(ZKey); If ZKey = #27 then Begin Clrscr; Writeln; Writeln; Writeln('Returning to the Main Menu... '); Close(Disk1);  Close(Disk2); Assign(Disk,'MENU.COM'); Execute(Disk); End; Until ZKey in['Y','N']; If ZKey = 'Y' then Begin Gotoxy(1,24); ClrEOL; Inputscr; End; End; Clrscr; End; If NOT Found then Begin Writeln; Writeln; Writeln('No Deleted Records Available.'); Writeln; Writeln; Write('Type any key to continue... '); Read(Kbd,Key); Clrscr; End; End; Begin {$I-} Filename := concat(Drive,'KEYLIST'); Assign(Disk1,Filename); Reset(Disk1); IOError; Filename := concat(Drive,'CARDFILE'); Assign(Disk2,Filename); Reset(Disk2); IOError; FileEndPointer := filesize(Disk2); {$I+} SearchFiles; Writeln; Writeln; Writeln('Returning to the Main Menu... '); Close(Disk1); Close(Disk2); Assign(Disk,'MENU.COM'); Execute(Disk); End.{File: VARIABLE.LIB} Type XInstallRecord = Record XDrive: String[2]; End; XKeyrec = Record XTagArray: Array[1..4] of String[40]; XUsed: Boolean; End; XCardrec = Record XCardArray: Array[1..55,1..16] of Char; End; Const MaxColumns: Integer = 55; MaxRows: Integer = 16; MaxKeys: Integer = 4; PrimaryKeyLen: Integer = 40; SecondaryKeyLen: Integer = 18; XOffset: Integer = 12; YOffset: Integer = 4; Var Disk: File; Disk1: File of XKeyrec; Disk2: File of XCardrec; DDisk: File of XInstallRecord; InstallRecord: XInstallRecord; Keyrec: XKeyrec; Cardrec: XCardrec; TagArray: Array[1..4] of String[40]; CardArray: Array[1..55,1..16] of Char; Drive: String[2]; Filename: String[10]; Temporary: String[80]; X, Y, Row, Column, Keypointer, FileEndPointer, FilePointer: Integer; Key: Char; PrintInit, ExitFlag, Used: Boolean; Procedure Help; Forward;ƒÃ€ãþ+ã‹üã &ŠˆFGâ÷2Àˆ‹ÄPè®Í ‹Ä;es£eÃU�ì’‹ì�†€�^V£¢‰¤è+ ¸¦Pè ‹å¸Pèù ‹å¸ºPèð ‹å¸*Pè ‹åè è>è% ¸½Pèñ ‹åƒ>q£ }èØënÇFÿ6u�FP�FVPè7‹å�FVPèK ‹åÇF‹vŠBVˆF „Àt=ÇF ÇF ‹v ‚¼¿tŠ„¿0äŠ^ 0ÿ;ØuÇF ëÿF ëÛƒ~ tèmÿF붃>q~ÔX†©ÆM‡GXœ¶Bq¶ ›á<Õ©F¸Ÿj„·©Fx™j„g©FxžðƒÚÿþìÃ?g³¦L«2…‹zÖ”iU¦€GØiO˜ï0X¡ÍñïÏ>üCqÖÝÍjüRcÓ_ÞÔè/§ýåTö]�ËþrªÑõ‡˰éz<‚6–Ž$gœ-æf°œ¡9yñ\Aº�‡Ms°é·øÄ®OÞŸŸ_(H÷Ë'SùäᄾÃ'ΰ9y~~_Aº�xX>y˜Ê''ô«Õ'ΰ=yÿì­‚t± ‡0p¹,»),1õ¸ì_‡%î.q˜š)àg'+H÷Ûþî:…ô,ÿ0ë·Ÿ8Ãêäý Ò}Äes–ÝÛ0…ÍTöúÿËe¹Ý†øÄžœ¼?© ÝGlúnºCØbÖoð‰3<ba:àrYvSXbê±é»©ìîú»C˜~ÿûfv˜–Í—›×?¼<¿À'ÎðÇ“÷ÏV�î#–ᦞ4—H¡{2=D¿Âes–˜z|øýï›ÙaZ6[\n^ÿðòüâgœqÆg{1_и„™µâ슎Úpé^ ¡8ƒt•Ж¼)â�ò_gM™ÊîÉ�©¹éð£üï˜{File: WRITREC.LIB} Procedure WriteRecord; Begin Used := true; {$I-} Filename := concat(Drive,'KEYLIST'); Assign(Disk1,Filename); Reset(Disk1); IOError; Seek(Disk1,FilePointer); IOError; With Keyrec do Begin For Row := 1 to MaxKeys do Begin XTagArray[Row] := TagArray[Row]; End; XUsed := Used; Write(Disk1,Keyrec); IOError; End; Close(Disk1); IOError; Filename := concat(Drive,'CARDFILE'); Assign(Disk,Filename); Reset(Disk2); IOError; Seek(Disk2,FilePointer); IOError; With Cardrec do Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin XCardArray[Column,Row] := CardArray[Column.Row]; End; End; Write(Disk2,Cardrec); IOError; End; Close(Disk2); IOError; {$I+} End; Procedure WriteCardFile; Begin {$I-} IOError; Seek(Disk2,FilePointer); IOError; With CardRec do Begin For Row := 1 to MaxRows do Begin For Column := 1 to MaxColumns do Begin XCardArray[Column,Row] := CardArray[Column,Row]; End; End; Write(Disk2,CardRec); IOError; End; {$I+} End; 5#pþ‹ÓV´ KbÀž´Yœža:ÕCÌŠ3HW mÉ›"êö”0Ò®]{‹�¬ÕæÌw¸�ãÜâ¶µBÃ^hcI g1+Î ]%´%oŠXó5Péáv daO Xœ¶¢]XÀ°oÚ�Ý\ �Yqé*¡-ySÄQïv$ÈX|mýš0ØÍL+ļ"ß^‘jì=µÁSû•bVœAºJhKÞ±niÚ#ÚÀž®ÖÞ“ÕWóVŒ°s¼n½%¬DkzˆYqé*¡-y£8ƒt•Ж¼)"ä_cÝÔ×u¼\†Ã›f¹,›'Ë0Ý-;L=6}7•Ý]@¬Ô›¬8ƒt‚ÚÑ›b¦¬8ƒt /†…PœAºãÜο=-Î/ê‹Yqé*¡-yS4õu DàK”è0¡D‡'ø.Ǻ©7YqéÚaÐGSÌš2­Êê8kÊ´*S8Û6SÌŠ3H'h [Ìš2­Ê²âLОZˤ[’Š3HW mÉ…JhKÞ(Î Ý^hcgkcµÍwŬ)ÓªL!+Î ÝÂÏ*fM™Ve YqFfTœqÆgœíÅ|AãZ^­µUœ]ÑQÎ^ ¡8ƒt•Ж¼QœAºJhKÞò/µÅ,Ãt·ìðvŽã32ë:fŤ«„¶äM!ÿòP[<€|Procedure WriteTagFile; Begin Used := true; {$I-} Seek(Disk1,FilePointer); IOError; With KeyRec do Begin For Row := 1 to MaxKeys do Begin XTagArray[Row] := TagArray[Row]; End; XUsed := Used; Write(Disk1,Keyrec); IOError; End; {$I+} End; CLASS24 FONφò Ò2ŸCLASS28 FONý†ò ËŒÂCOMP12 FONAh— Î/COMP20 FON8h— VP0¯< Vè7¤8»¢£6œAº…§V(Î ]%´%o ?غA�g�îÕZÛ Å™QqÆÙ^Ì4®a37#™�FÅÙµá Ò-<µBqé*¡-ySøÁÖ ê'ÈŠ3H÷j­í…âŒÌ¨8㌳½˜/h\ B0¾GgWtÔ†3H·ðÔ Å¤«„¶äMá[7¨¢.³â Ò½Zk{¡8#3*Î8ãl/æ ׂ°íÎ*Î®è¨ g�nᩊ3HW mɛ¶nêmVœAºWkm/gdFÅgœíÅ|AãZfdÖogWtÔ†3H·ðbXŤ«„¶ä�â ÒUB[òFqé*¡-y£8ƒt•Ж¼)"ä¯78ÁÆS+°ÚX¸Zïv$bVœAºJhKÞò׿àô‹¶°sl~s9‹Yqé*¡-ySDÈ_¿Â ^­µ…�cÖjƒ™uÌŠ3HW mÉ›"Bþú'çëkOƒú Ŭ8ƒt•Ж¼)"ä¯{œ`Ñ›‘Ì@cÌŠ3HW mÉ›"Bþ:àÁøViŒYqé*¡-ySDÈ_oq‚­hw6fŤ«„¶ä�â ÒUB[òFqé*¡-y£8ƒt•ЖŠõ5êØ_NeßáÁĺA½É ‚Ú±xs5Ö7]VœAº›�N°Þ/Ú�Š›.+Î ën:œÄÃÉÍ«Copyright (C) 1984 BORLAND Inc‚AKaypro, no hilitetedP= ER~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉ!ð ë!›45(É!.+/ –0ü†õyþ0(ñíÉ d!kÃZ!{ÃZ͈æ͈o&Éô  áÁå:á·(yþ ÕÅÍ |µ(Íþ ÍþÊÅÁÑ*é"ÛÕx2áy·( >Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ðëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8Í� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂuÙÍaÙ}.�•õ; ÙÍOÙÍJ ÅÕåÙ,ÍÖ ÙáÑÁ; ÝåÝ!U >ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕåõÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.(ÍC Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øïÍ ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8Íèþ ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(ÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\*â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝpÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!Àè¸ÿÍ�!Ç4ßÀͲÃõ2Íc!å!ÍÍRÍ�0 Complex Decision AssistanceÍ�ÍbÍRÍ�ÍbÍRÍ�* by Glenn BrookeÍ�ÍbÍRÍ�, Last Update 4/27/85Í�Íb!å!ÍÍRÍ�= Based upon a program by John Kasunich and Glenn Brooke.Í�ÍbÍRÍ�EThe concept is simple : a complex decision can be reduced to a seriesÍ�ÍbÍRÍ�Dof simpler decisions, the simplest being a decision between 2 items.Í�ÍbÍRÍ�CSuppose you are attempting to decide between 4 cars, and you have aÍ�ÍbÍRÍ�Alist of 24 characteristics by which to distinguish them (mileage,Í�ÍbÍRÍ�Eleg room, looks, maintenance costs, etc.). This program reduces thisÍ�ÍbÍRÍ�Bcomplex decision to a series of randomly presented choices betweenÍ�ÍbÍRÍ�2two characteristics for each car. Try it and see!Í�ÍbÉýáá"Áýå*ÁÍå!Ñ"Á*ÁÉ!å! ÑÍ5z³ÊÔ#Õ" Á!å! ÑÍ5z³ÊË#Õ" Á!å!ÑÍ5z³ÊÂ#Õ"Á!†Âå* Á+)))å)å))å)))ÑÑÑÑå* Á+))å)å)å)ÑÑÑÑå*Á+)Ñå!ëás#r*Á#ÑÃn#* Á#ÑÃZ#* Á#ÑÃF#!å!ÑÍ5z³Ê7$Õ" Á!å!ÑÍ5z³Ê.$Õ" Á!ÔÝå* Á+))å)å)å)ÑÑÑÑå* Á+)Ñå!ëás#r* Á#ÑÃó#* Á#ÑÃß#!å!ÑÍ5z³ÊÄ$Õ" Á!~èå* Á+)Ñå!ëás#r!Üäå* Á+å)å)å)å)ÑÑÑÑÑåÍÍÑ!2Úå* Á+å)å)å)å)ÑÑÑÑÑåÍÍÑ!öÙå* Á+)Ñå!ëás#r* Á#ÑÃB$!å! ÑÍ5z³Ê%Õ" Á!<Áå* Á+å)å)å)å)ÑÑÑÑÑåÍÍÑ!rÂå* Á+)Ñå!ëás#r* Á#ÑÃÏ$!å!ÍÍRÍ�Press any key to continue...ÍbÍ ËEÊI%ÍcÉÍcÍRÍ�C Now let's get the choices and values for these choices:Í�ÍbÍRÍ�Íb!å!ÍÍRÍ�) How many choices are there (Max = ! å!ÍöÍ�) ? Íb!8ÁÍ+ÍîÍbÍRÍ�Íb*8ÁåÍQ!å! ÍkÍËEʱ%!å!ÍÍRÍ�8 How many values will you base your choice upon (Max = !å!ÍöÍ�) ? Íb!:ÁÍ+ÍîÍbÍRÍ�Íb*:ÁåÍQ!å!ÍkÍËEÊ.&Íc!å!ÍÍRÍ� Ok, so you have *:Áå!ÍöÍ� values for *8Áå!ÍöÍ� choices.Í�ÍbÍRÍ�ÍbÍRÍ�0Let's begin by getting a list of your choices :Í�ÍbÍRÍ�Íb!å*8ÁÑÍ5z³ÊÜ'Õ"ÁÍRÍ�Choice number *Áå!ÍöÍ� is : Íb!<Áå*Á+å)å)å)å)ÑÑÑÑÑÍ+Í.ÍbÍRÍ�Íb*Á#ÑÃp'Íc!å!ÍÍRÍ�! Next enter the list of values : Í�ÍbÍRÍ�Íb!å*:ÁÑÍ5z³Ê–(Õ"ÁÍRÍ� Value number *Áå!ÍöÍ� is : Íb!2Úå*Á+å)å)å)å)ÑÑÑÑÑÍ+Í.ÍbÍRÍ�Íb*Á#ÑÃ+(ÍRÍ�ÍbÍRÍ�ÍbÉýáá"ÿÀýå!å*ÿÀÑÍ5z³Êu)Õ"ùÀ!ÿÿ"õÀ!å*ÿÀÑÍ5z³Ê)Õ"÷À*õÀå!~èå*÷À+)Ñ^#VëÑͯËEÊ)!~èå*÷À+)Ñ^#Vë"õÀ*÷À"óÀ*÷À#ÑÃÖ(!Üäå*óÀ+å)å)å)å)ÑÑÑÑÑÍ ÍR!ÍqÍ� *õÀå!ÍöÍ�Íb!~èå*óÀ+)Ñå!ÿÿëás#r*ùÀ#Ñü(É*:Á"-Á*-Á"+Á*:Áå*:Áå!Ñë·íRÑÍÄå!ÍÑÙáÍÑÍÉ Ù!#ÁÍ¡!"íÀ*íÀå!#ÁÍüÙáÍÑ͸ËEÊü+*-ÁåÍ #"2Á*+ÁåÍ #"0Á!ÔÝå*2Á+))å)å)å)ÑÑÑÑå*0Á+)Ñ^#Vëå!ÑÍNå*2Áå*0ÁÑͯÑ}£oËEÊÉ)Íc!å!ÍÍRÍ�3 What is more important to you : Í�ÍbÍRÍ� 1) !2Úå*2Á+å)å)å)å)ÑÑÑÑÑÍ !ÍqÍ�ÍbÍRÍ� 2) !2Úå*0Á+å)å)å)å)ÑÑÑÑÑÍ !ÍqÍ�ÍbÍRÍ�Íb!å! ÍÍRÍ�Enter the number : Íb!4ÁÍ+ÍîÍb*4ÁåÍQ!Ía!ÍaÍËEÊ +*4Áå!ÑÍNËEÊŽ+!öÙå*2Á+)Ñå!öÙå*2Á+)Ñ^#Vëå!Ñëás#r*4Áå!ÑÍNËEÊÄ+!öÙå*0Á+)Ñå!öÙå*0Á+)Ñ^#Vëå!Ñëás#r!ÔÝå*2Á+))å)å)å)ÑÑÑÑå*0Á+)Ñå!ëás#r*íÀå!Ñ"íÀò)Íc!å*:ÁÑÍ5z³Êy,Õ"2Á!~èå*2Á+)Ñå!öÙå*2Á+)Ñ^#Vëëás#r!Üäå*2Á+å)å)å)å)ÑÑÑÑÑå!2Úå*2Á+å)å)å)å)ÑÑÑÑÑÍ ÍÑ*2Á#Ñà ,!å!ÍÍRÍ�& Here are the weights of the values : Í�ÍbÍRÍ�Íb*:ÁåÍ©(ÍRÍ�ÍbÍRÍ�ÍbÍRÍ�$ Press any key to continue....ÍbÍ ËEÊ-ÍcÉÃ¥-Íc!å*:ÁÑÍ5z³Ê¡-Õ"ßÀÍRÍ� What weight do you assign !2Úå*ßÀ+å)å)å)å)ÑÑÑÑÑÍ !ÍqÍ� : Íb!öÙå*ßÀ+)ÑÍ+ÍîÍbÍRÍ�Íb*ßÀ#ÑÃ#-ÍcÉ*8Áå*8Áå!Ñë·íRÑÍÄå!ÍÑÙáÍÑÍÉ ÅÕå*:ÁÍÑÙáÑÁÍÄ Ù!ÁÍ¡Íc!å!ÍÍRÍ�% 1) Use current weightingÍ�ÍbÍRÍ�$ 2) Enter new weighting Í�ÍbÍRÍ�Íb!å!ÍÍRÍ�, Enter the number of your selection Íb!åÀÍ+ÍîÍbÍRÍ�Íb*åÀå!ÑÍNå*åÀå!ÑÍNÑ}³oËEÊX.*åÀå!ÑÍNËEÊà.Í-!"çÀ*çÀå!ÁÍüÙáÍÑ͸ËEÊÂ1*:ÁåÍ #"4Á*8ÁåÍ #"2Á*8ÁåÍ #"0Á!†Âå*2Á+)))å)å))å)))ÑÑÑÑå*0Á+))å)å)å)ÑÑÑÑå*4Á+)Ñ^#Vëå!ÑÍNå*2Áå*0ÁÑͯÑ}£oËEÊý.Íc!å!ÍÍRÍ�3 Which choice is better with regard to <>Í�ÍbÍRÍ�ÍbÍRÍ� 1) !<Áå*2Á+å)å)å)å)ÑÑÑÑÑÍ !ÍqÍ�ÍbÍRÍ� 2) !<Áå*0Á+å)å)å)å)ÑÑÑÑÑÍ !ÍqÍ�ÍbÍRÍ�Íb!å! ÍÍRÍ�$Enter the number of better choice : Íb!ºèÍ+ÍîÍbÍRÍ�Íb*ºèåÍQ!Ía!ÍaÍËEÊ…0*ºèå!ÑÍNËEÊ/1!rÂå*2Á+)Ñå!rÂå*2Á+)Ñ^#Vëå!öÙå*4Á+)Ñ^#VëÑëás#r*ºèå!ÑÍNËEÊq1!rÂå*0Á+)Ñå!rÂå*0Á+)Ñ^#Vëå!öÙå*4Á+)Ñ^#VëÑëás#r!†Âå*2Á+)))å)å))å)))ÑÑÑÑå*0Á+))å)å)å)ÑÑÑÑå*4Á+)Ñå!ëás#r*çÀå!Ñ"çÀÃæ.Íc!å*8ÁÑÍ5z³Ê?2Õ"2Á!~èå*2Á+)Ñå!rÂå*2Á+)Ñ^#Vëëás#r!Üäå*2Á+å)å)å)å)ÑÑÑÑÑå!<Áå*2Á+å)å)å)å)ÑÑÑÑÑÍ ÍÑ*2Á#ÑÃÐ1!å!ÍÍRÍ�@ Here are the scores of your choices given the weighted values :Í�ÍbÍRÍ�Íb*8ÁåÍ©(ÍRÍ�ÍbÍRÍ�ÍbÍRÍ�' Press any key to continue .... ÍbÍ ËEÊé2ÍcÉÍçÍ;#ÍU%Ív)Í-!å! ÍÍRÍ�3 (1) New Choices and New WeightsÍ�ÍbÍRÍ�( (2) New Weights OnlyÍ�ÍbÍRÍ�( (3) New Choices OnlyÍ�ÍbÍRÍ�0 (4) EXIT to operating systemÍ�ÍbÍRÍ�ÍbÍRÍ�4 What do you want to do (1,2,3, or 4) ?Íb!ºèÍ+ÍîÍb*ºèåÍQ!Ía!Ía!Ía!ÍaÍËEÊ3*ºè·íR‡4ÍU%Ív)Ã3ÃÄ4·íRš4Ív)Ã3ÃÄ4·íR­4ÍU%Ã3ÃÄ4·íRÂÄ4!å!ÍÍÅÃÅ*ºèåÍQ!Ía!Ía!Ía!ÍaÍËEÊ3*ºè·íRÂÍU%Ív Documentation for CHOOSE.PAS By Glenn Brooke Last Update 4/25/85 Our decisions are quite often complex. There are many variables (values) to consider when evaluating a new or used car, which college to attend or job to take, what to plant in the garden this year, etc. Most of the time there are even more than 2 choices to evaluate with respect to each of these values! Aha, you say, my computer should be able to make my decision. Well, computers are only tools (at this point in time), and human judgement is still required. CHOOSE was written to make the decision a little easier, however, and certainly helps to clarify why you make decisions. The original program was written in M-Basic by John Kasunich and subsequently modified by Glenn Brooke in 1984. John and I were roommates at Case Western Reserve University at the time. John used the program to help decide between several job offers (he's doing nicely now, making big bucks), while I used to it to compare offers from graduate schools (I'm well too, but poorer). I have recently been purchasing spectrophotometers, fraction col- lectors, and other big-ticket items for my lab at Northwestern, and rewrote the program in Turbo Pascal, spiffing it up a bit. This is version 1.03, flexible for multiple comparisons of the same values on different choices, or different values using the same choices, etc. The .COM file is included here for folks who want to use the program but lack a Turbo compiler. The source is available also, in the interest of future improved versions. (I'd like to see hard copy and disk access included.) Run the program as any .COM file. You'll first be asked for the number of choices and values, then input these at the keyboard. Next the program will help you assign weights to these values. (Manual weighting can also be used.) Using these weighted values, the program will present each choice in light of each value, asking you which is better. A tabulation of these simple decisions will be shown, and then you are free to try new choices, new values, or any combination. It sounds hard, but it's very easy. Just try it! The nice thing about the program is that it has a random selection pattern which reduces your overall bias in evaluating choices. Go for it! Glenn Brooke 1025 Garnett Place Evanston, IL 60201 (312)864-2963 evenings or (312)649-1730 Z-Node RCPM vÿé›CHOOSE.PASlßÿ šÿ–ÿ‘ÿ‹ÿ�ÿòÿõÿ�ÿžÿŒÿoÿœÿÄÿ“ÿ !"#$%Šÿ›ÿ—ÿúÿ˜ÿØÿÅÿˆÿÖÿ&'()*+,-./01234’ÿ†ÿ‡ÿ×ÿÓÿ‰ÿÎÿ�ÿÂÿ�ÿÑÿ¤ÿ¢ÿ™ÿ­ÿ¼ÿ¬ÿºÿ56789:;<=>?@²ÿöÿ©ÿ¸ÿÍÿ°ÿ«ÿƒÿABCDEFGHIJKLMNOP¾ÿ±ÿ¶ÿ„ÿ‚ÿÏÿùÿËÿ½ÿ”ÿ»ÿ¨ÿªÿ¯ÿÒÿ·ÿÊÿ÷ÿôÿëÿÐÿ³ÿðÿÌÿQRSTUVWXÔÿÇÿÃÿ¹ÿûÿYZ[\]^_`abcíÿìÿ´ÿ•ÿóÿñÿµÿøÿÕÿÈÿÀÿ¦ÿ…ÿïÿdefghijkèÿÆÿÁÿ®ÿ¥ÿîÿêÿéÿæÿåÿäÿÞÿÜÿÉÿ§ÿÿþKeåF8VÖzJÚ<îKI,pW¨µÅ[ç£ËX�q�I¼PÖ¾$<ÿróç/?~˜ám±ÎñÆ I¢¤r£ ~¶9ÛÞc©XD^f‚¬œD´£e¦ JŠìÙ »Ç¨È’ßÍ].¨ÄRÙu¦‘GtB¬ ŠÊ"R iáàI1yØ=be9’ÇšdO$pƒ¹Ëù ð tKI%öÊŽà„6¸x÷ÂyŽX*Û(7B¯XJ`�Å?þxƒõ°•Àoœ/Ç N”¸Î$^(k_Òæ‰6Úhóx.´¹×æw�Ña‹ce­§¢-3MPRdÏVÀq‰�6÷ÚÜãÕƒ»3:<ÿróç/?~@øxu>œÝ>D‡Åæéw„?~}ððú̓ë3º»B­-Þ:]Öæ§~s>ÿËù>¸8£ŽïooOçÍÛ>!|úúèÅáÁá¯xøàâŒîøþöötÞ|}qÐæ‡ó×wçWøùÑ×ó ŽïooOçÍ«Ûã Ç÷··§óæöÅ´¹×æ§¿žîÎèp’N”N•8¾ýrñîǧ3ŒXð¨áù�¿Ùhs¯Í=Þ¾9¼½=�ÑáÎÂq PT‘E‡hGËL“FE–ünîrA()²g+ÀBZ8xRL^›{m÷ðÎ�gtV�6÷ÚÜãÕíñÍÅùá݃»G·ÑxãIa©ìh)ý ›W·Gì9Ó N”ˆv4"!©„·…Š„hKÒæ^›{¼=Ü^\àÍéÁõp´£%gB!JR¸+ÔÚâ­óÑeD;Zr&i±9Þ^`Ï™f°J›{„_žp|{{:oŽ·ØÛB”`�ÌkåÔx£Í*\<ÑF›ìÖ”�Wç»óáâÑÃsBøåqá© Œ ,•m”amËñm´‰Vx© B}á&ÇÊr$�O€Ç#7áQ1ÂÿÀî+Ë‘ü N”˜»\�¢ B}á&W.ä±Â÷§ImäxIÚ üR’�Š—XÁKÅ¢Ù~ºKÚh3wJ,b¥Ð�…¤†TB¸|¼· #É-ï€n…¶MÚ \^¹\ÐIny‡n…¶MÚ \^¹\ÐaË;t+fuŠ*iƒP÷Š%e1m~÷ÐöÈ$ÛÖ£! Ybe9’‡%æ.ä±· ²"Oˆ•åH¾k‡¤ BÝ+–”EÒ¡V´$'µA¨+íd<]ÌžI„ºW,iÚ"üñ½í1rbŒXYŽäáAV¤Ó 7Á íìÂMŽ•åH~Öø Ú!iƒP+råT£XYŽä‡„^±¤,’6u!$gˆb+Ë‘fuŠ*iƒP7VÚÉxº˜=’6u¯XRÓi"AB’‚¬™½„ÝcîrAÚ!iƒP÷Š%e‘´A¨÷V�Ñ­°€´ÅhîrA¥ÕárM m.{Å’¦í•ËA£5)´3înf-Ø£C;$E®œ^¹\ÐIny7$m.{Å’²HÚ \’(“6u¯XR ½bIY$mH” �¯I+Ë‘üQ^¹\�¢�6Ú,•�TŠð3‹òÂM¦¥G’RCÒæqf/=l!Ñ7•dÑÀ‰VV¤ ÈYú'ÚÌ�Âd6F’RI›‘›Ì0r“XHjH%mÖÔ°Ðá—½U˜ [aiQz”V„�kjXhƒðqä&èVx·HÚ |Ü[…1º�¥GiµAøÝšÚ üŽ÷¹ ~‚Sj¼ï +Ú |[SÃB„o#7A·‚Sj¼ï’6ßFnR¢[aœ´AøF¢LÚ üŽD™´AøØ+–”ÅÔ)5>ÉíÈMÊ]÷ýé¬ÚÙÈM†¤ ÂG§Ôx;r“r‡n…w‹¤ ÂGeÂã½U˜<цD™´Ñf©l¤²P„k¤œ¤×ÄM%}Òæ±r¢´£<ÆR‘'!=n0w¹ �BHÎp9#ÚÑš…“l…Gåæ„5‘ÀR‘'!©œAV$´AÉ~™ÝØCV„ž¸©¤‡óˆ.Ç";I忉6s§0�B¢ I ©¤ÍšÚ Ô~‚nQŒæ.äüÝ ~’´A¨çQÈ‘› [a*ŠÑÜå‚<þ„©(Fs— òx‡Å0à n’6õ< ‰n…§I„º¯8æQHü„yrä&(­6õšÚ iƒpùXZØ9)Å%!ÚѲ�T¢'n*éѳ¬0r¢p$¤bòO´A¸œ;F’RI„Ë55,´Aøý1«STI„ßï­£[ai!ŠÑÜå‚ÌO‡Ô+–4mÏB’‚¬¢­IÁî±&)I!V–#¡C;$m>)rå”E¬Ô�Ð+–”EÒ¡.„ä ±R`�íbv³KÚ Ô¼‹X)¬°€¬H V–#¶“ºbe9Òa;Ùá\¹\Ða;ß%mjÞƒE¬V¸�¬H V–#¶ãºbe9Òa;ÞáÌ].è°�ï’6u¬,GòÛÉl<›ïЭ°HÚ Ô1 ‰n……ÄX$mjeÂã¾âLO´A¨�Y�¢JÚ Ô{«0A·ÂÒB£XYŽäQZm.×Ô°ÐáÒ)5ÞNvèVˆ•åH‡íd—´A¸tJ�Or;Ù¡[!V–#�äv²KÚ \’(“6uc¥�Œ§fχ¤ BÝ+–”Å´Å{R§²"øhyØ=ƶPˆ•åH ÏI@V„ž¸©$•˜»\�G×I„ºW,)‹¤ Bý3‹òÂM¦¢ÅÊr$?$mê^±¤,zÅ’²HÚ Ô½bIÓáã[EÞÉ1^ÒÒ"Z!Y„Møí�´A¨-ÉIBrÆK/yOeÒ¡>fuŠ*iC¢LxüŠ"{¶b³Ù<ÑFm´YSÃ�GŽ–Ê6Ê�°¶åø‰6Ï^+–ôHìmÒáÙ#Á’]æ¿QÒáÙ5Éce9’ Ê+— òI„g×$H9I¯‰›Jú¤Í«óÝùpñèá¹ÓáÙ+’¤F,èXYŽ”´Ax¦hINjƒð¬±ÒNÆÓÅlñtHÚ <ëKÊbÚ"üzº€‡ÔãXYŽäáD‰‡Ôã5qSIßI„g½bIYL[„_Ooà!õxMÜTÒãVäq;$mžõŠ%e1m~=ý>©Ç±²ÉãVäq;$mžõŠ%e1m~=}>çÿ{tia—¤œdÑÀ�½¤Q;$mžõŠ%e‘´AxÖ+–4m~ÿºr¥ÅØè���¥Åt1»™}ŸÁ*<ð—vHŠ\9e+5$mžBr‹X)°Àv1»™}Ÿ=ß%mžEç ,b¥`÷Ú |Z ÃšÚ |¾&y¬,GòDyårA>iƒðùš)'é5qSIŸ´AøÜXiñê|w>\ݠÚÚ |¾&AÊIzMÜTÒ'm>7VZ¼:ß��ž“6ßH”I„OßÑaM m>_“ '' then Begin For I := 1 to length(Temp) do Temp[I] := upcase(Temp[I]); SecondLen := length(Temp); SecondKey := Temp; End Else Begin SecondKey := FirstKey; SecondLen := FirstLen; End; If (length(FirstKey) = 0) AND (length(SecondKey) = 0) then KeyEntered := false; Writeln; Writeln; Writeln('First key: ',FirstKey); Writeln('Second keÃã Í«Copyright (C) 1985 BORLAND IncƒBAmstrad PCW 8256ctedZEyEH1Y EHHLMKqp~·7È#õå~Íéáñ= ô·ÉÍ ÉoåͦÉþ€ÜlÔ…æîå!ïå!é"áãõÅÕ~#·(åÍéáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨Í6!¢ÍÐ*ºÔáÑÁñÉõÅÕå!´éõÅÕå!®àõ:à·(ÅÕå¯2à!ÈÍ6áÑÁñÉõ:àþÿ(öÅÕå>ÿ2à!ÂãõÅÕå!¼ÚõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÝÑ:ŸO:�ƒÍÝ!ðÍÐ* ÍáÑÁñÉ!ð ë!›45(É! +/ –0ü†õyþ0(ñíÉ d!kÃ6!{Ã6Í`æÍ`o&Éô  áÁå:Ý·(ÕÅÍ |µ(Íâþ ÍâþÊÕ ÁÑ*é"Òx2Ýy·( >Ã28!ü"9!¦ í°!¾¸ í°¯og2Ð"Ô"Ö>~2Ñ2àÉÃÃ!Ã:Ã0Ã5Ã+Ã:Ã!Á‚CÄÅÁÅÕåÝåýåõo&åͦñýáÝááÑÁÉÅÕåÝåýåÍ£}ëÿ í[Òþ (ú!eÍ|ͧþA8þQ0Gþ: xÖ@¯!\w# (̓ þ?(þ*( þ.( ÍxÍ_þ. Í_!h6#ûÉ (þ?( þ*( ̓( w#éÉ>?> w#üÉͧþ 8 åÅ!™í±ÁáÉ¿É .,;:=?*[]<>{}þaØþ{ÐÖ É|͵}õ;ñæÆ�'Î@'Ãʯ7Ë|À|·}È>ÿÉ2ØÅͰÁ*·íBÚ© ëÑùü "Ưog"Î2Ü>Ã2Ù!ß "Úë"Ìéå*Æ·íB"Æí[Ä·íRëáÚví°É*Æí°"ÆÙÉ^#V#Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍ»¶wÝéÝáÑ}“8÷�Ã( ·íR·íB0 É>‘Ã( ·íRëêrðøÉÕë·íRëáë·íR!È+ÉÍà õͱ ð·íR!À+ÉÍà õͱ ðÍs!Ð+ÉÍà õͱ ðÍs!ÈØ+ÉÍà ôͱ ïÍs!ÈØ#ÉÍà ôͱ ïÍs!Ø+ÉÍà õͱ ðT]KBë!z·> S>)ë)ë0 = öÉ|µÊ |ªõÍ�ëÍ�ëDM¯go>íjíB0 7?ËË= ðëñðHåÍ“Ë<ËÑëÍëËzÈ5ÍbÈ)ýÉÍbÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÊí[ÈÅÕxAJSËËËËáëáíJDM!éb"Èë!6íJ"ÊDMÉ'ÍãèÍãdÍã Íã} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~ͧÖ08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>Ã* ÝáÍÉWáÍÞ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯Ã* Í Ð>Ã( Í‚ õÍ­͘ íÙ}·Ù>Ê( Íö ßÙËxÙ‰ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍ{ ,= ù(Ùñæ€ Í“ 0%Í| ·, 7 ÍÇ ?õ(8ÙÍ­ Ëx ͇ - öÍs ñ8˸·ÙáÑÁÙÉÙËxÙ Í� Í Ø,-Èxî€GÉÙ}·ÙÊs }·ÈÙ…ÙÍN ÅÕåÝ9Ís Ù.Ù>Ý#ÝnË0Í“ Í| = ñÙ-Ù åÝnûËx ͈ ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ìs É}·ÈÙ•Ù?ÍN åååÝ9Ù.Ù>ÍÇ 8Í­ ?Ë= ÝuÝ+Ù-Ù(>͇ 0ßÍ­ ·á͇ 8ÍÇ ?áÑÁËx ͈ š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨òê xÉËx(Íô È?É}Ù½ÙÀ·ÈÃÇ }Ö�Ús <þ(ÐÙÅÕåÍs 7Í| = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃ| ÙÅÕåÙÍ­ÙÍþ ÙÍ‚ ë}·ÈËx>Â( Í­}Æ€Ë/Æ€oÖõÙÅÕåÍö Í -ÅÕåÍ‚ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍ�-Í‚ ÙÍ�,Ù}þlØÅ˸Íà Á8 Íö Í5 ͘ Ëx(Í Ù-ÙÍà õ8Í‚ Ù-ÙÍà 8Ù,Í‚ }þl8;Ùª*ªª!ªÍ˜ ÝåÝ! >Í5ÝáÍ­͘ ͘ ÅÕåÙÍ­--Ù-Í ÙáÑÁÙÍ‚ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->Ê( ËxÂ( ÙÍ™Ù}.�•õÍö Ù͇ÙÍ‚ ÅÕåÙ,Í ÙáÑÁÍö ÝåÝ!� >Í5Ýá,ÙÍ£-ÙÍ ñÅÕåo&0%Í Ù,͘ ÙáÑÁÍ }þgÚs É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍ£Ù·Ëxõ˸Íö }þˆ0GÅÕå,ÍÑåË<Ë}áõÍ ,-(-ÙñáÑÁõÍ‚ ÝåÝ!>ÍJÝáñ0 õÙÍ™Ù͘ ñ…o8 ñÈÙ͇Ãö á>Ã( m.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙ͇Ù¯Ëx(<˸õÍà 8ÙÍö ñËÿõÙÏŽé!~JÙÍà 0Í/OÝ!Ï>ÙÝÍtÙÍà 8 = ìÙ ÝÙÙÍoËøÍ ÅÕåÍt͘ Ù͇Í ÙáÑÁÍö ÝåÍ/ÝáÙÍoÍ ñ0 õÙÍ�-Í‚ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ! >ÅÕåõÍ­͘ ñÍJÙáÑÁØ õÙÍoõÙÅÕåÍoÍ ÙáÑÁÙ͘ ñ= éÙ͇à ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ“!€> Ëx Ë#ËËË-= ðo˸ÉËxÙ͇(Ëø-Í ·Ë}(ËxËø>�½8(Í{ ,óÍ{ `iÈÄ!É>’Ã( |µÊs Ë|Í�>�)=Ë|(úDMboÀ˸ÉÍÉë8þ8ÍÉÙËxÙ(’0¯þ 8> ÕÍ�ÑËx(>-ÍæË{(aËy(ÍäÍÚ ò�z·(>.Íæ (Íä ÷ú²ÍÚ÷Ë{È>EÍæ>+Ë|(|íDg>-Íæ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯Ã~Å˸}ÙÖ€oŸgMÍö|þÙ <ýwíDÍA}þ�0Í´ý5Ëø>„•.(Í{ Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%͈ Ë%͈ ëãÑãíZëáãíJDMáË%͈ = ÈñÁýáÉýåá_~6þ5Øú�+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|Í{ Í{ „gãíZëáãíJDMá0Í| ,7È}Æo˸ÉÍ@¾ #øyîO!@9ùi&ÝéÍ@ ë¶¾ â#÷ÚÍ@¶w#ùëùÝéÍ@/¦w#øïÍ@¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍ»¦!"9ù!(#Ýé>¯2èýá*ÒÍã¯á"âýå|· >"2ÐÉ:è·( Í· *âwÉÍó*â6 ë!\$í°É!çÅåí[Òþ (úͧ–( áÁã·É#ëÁÁþ:À~ÉCONÁTRMÁKBD‚LSTCAUXÄUSRÅ>¯2èÍj:зÀ*âË®~æÀÍ1:зÀ*â:è·€€(@q##pÉÍ[*â ë:è·( ÕÍÑñÅÍÁ<Àx2ÐÉ*â6#ûÉ"â~æÀËv( >ÍÇÍ Ë~È*âå ëÍá< >ÿ2Ð6Éã"äãå!Â"âáÉã"äã"âË~À>2ÐÉã"äã"âËvÀ>2ÐÉ>¯ã"äãå!Â"âË®õÍéñ·(ÍâáÉ!Ñ~þ8>~O6~*Ò"ÔÍâwþ(6þ(2þ(-þ()þ(6þ (8þ 0þ Ù:Ý·(ÓÝ*äà yº(È~#ÍÊÀúþ+Í (±ï(« 6Íâ6 #6 #"ÖÉ*â:з y~Ëo pæ .##~·ò˜åÍ»á(å.6á¯w4Æ._~þ =*â##55= *Ôí[Ö·íR8ÿÍë*Ô~#"Ô= Í£}== ͯ}͵}*âËî#w+É#~+É>Éå*â~æþ('Ílþ!0þ(Ë®ñ]ÅÕÍlÑÁþ!8Ë®ï¯áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>2Ð7ÉåÍlË®áwÉ>¯OÅÍñÁÍ%ÈÅåÍøÑÁÍ7ØÌ„ës #rëÉÍñÍ%ÈÅåͤÙáÁÍ7ØÙÌ� ÙÃÒåëÅÕÍlÑÁþ ( þ(Ë® êáqÉÍlþ(Ë®þ ( þ ïÍlþ Ë®É*âO:зÀ~æ ##å~Æ._qá4ð(þ(áÅå=ʦ==Ê©=ʬò*è:ê¾È4^qÉ*â##~·È6Í»È>ð2ÐÉ}ÃÇÁÑÅÝ*ÒË|(Í„ëëË|( Í„Ý6-Ý#ÕÍÇáÍÉí[ÒÝåá·íRMë‘8( Gå> ÅÍÇÁ÷áAÈ~ÅåÍÇáÁ#óÁÑÙáÑÁÙÅÝ*ÒÕÍ(¾ÁÑÅÍÉËC!¢ ¿!¦¸TRUEFALSEÍÉ!9N#ÍZÑùÕÉá~#·( G~ÅåÍÇáÁ#õé> ÍÇ> ÃÇ   "âË~(ÕÍlÑ»(þ( þ!0 (Ë®è!É!É>¯2èíSæÍ{:зÀÍ1:зÀ*â6Ð##ww#w$w#wÖÿ:è· å¯Í á##N#F*æ·íBÈ>�2ÐÉå¯w#w#í[æs#rá>à "â~æÀÈͯ*â-¯w#wÔÿw##>Í ͯÂã"äã"â~æÀÀ>2ÐÉ:зÀåÍ[ë·íRá0¯Í *â4À#4É>™2ÐÉ:зÀåÍ[·íR> *â4 #4(>áÍ Èá>ò2ÐÉ2éë*âËf(/˦:éËG(##~++· :éËO x· y·úDÅÕ!Í»ÑÁ Q*â:éËG(Ëî##~Æ.Õ_ÑÖ.Í›í âg<ò]=<Í›*â##æw ÅÕåͯáÑÁ Õ+Ñ4 #4x±ÂëÉ>™>ð2ÐÉõ:éËG(ëñÉ"âͯÈæ"*âËæËnÈË®*âåÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍ[Ñ·íR8@*â N#F#s#rÍ- 0}æ)ëíjëS\*â##w+ N#Fë·íB ÈÕåͯÑár+sÉ>‘2ÐÉÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍ^·íR!À#ÉÍ^ëÉ*â^#V#ÕN#F#^#VáÉ>¯2èͱ:зÀÍ1:зÀ*â6Àå ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉ"â~æÀÈÂ>">!DM!ð"æÝáÑáÝåÅÍþÁ:зÀ*ðíBÈ:éþ!>™(>ð2ÐÉ>">!"æÝáÁÑáÝå2é"â~æÀʱ*æ¯w#wx±(9ÅÕÍ*â ë:éOÍÑÁ· Õ*â-4 #4Ñ!€ë*æ4 #4 Ã*â-N#FÚÿq#püÿV+^ë·íBÐëq#pÉÁÑíSâÅåÍ[Ñ·íRÚ'*â s#r$ s#rÉÍMÀ ëÍ<À?ýá*ÒÍã¯áýåÍMÀåÍóáåë!\ í°á åëÍÑ<( !\$í°É>2ÐÉ>¯2èÍMÀ:Ø·>!(ë*â \$í°\Í<(Ï!4°í°:è· í[1ðÕÍ\ÍÑ!€ë·(é7"â~æÈ> 2ÐÉ"æíSèëá"âNs#Frë·íB(Zë#\:Ü í°¯üå\ÍÑ<(?*æ"}íKèÅÕÍ\!ÍÑÁ· !*}#"}!€ë x± Û\Í*â éÝ*â>ðÃ* ÍÉþÐ2ÜÉ"ðëáã"ò{æü_!Þ"øÝ*ÞÝnÝf}´(HíR0ÝnÝfåÝ"øÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝpÝåÑ*øs#rÑ*òs#rÉÝåá"Ä*ð ÝåÁ ÚvíKÆíB!Ú1>ÿÃ( ëáã~#fo{æü_ë"ð*ÞåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKðýqýpýuýtÝsÝrÝåáÝNÝFÍ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ÞíSÞÕÝáÝuÝtíKðÝqÝpë ·íRÀÕýá*Ä·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Ä6#ûÉÍL*ôÉÍL*öÉ!"ô"öÝ*ÞÝNÝFy°(*ô "ô*ö·íB0íCöÝnÝfåÝáØ*Æûÿ í[Ä·íRØë*ô"ô*ö·íRÐíSöÉí[Äs#rÉ^#Vë"Ä"Þ6#ûÉ>¯O"è¯w2Ðx2ê*â"í!G"âá"äá Í'Íz*í"â*äé>¯2ì"è*â"í!G"âá"äá"ê!\Íã¯*ê:ì· ÍOÍs!Ð~6·go(Ýåá\íRë*ès#r£Æí_2ËÉëÝáÁáx±( s x±(T]í°ÝéDMÝáÑáx±(ôíR0í ë ëí¸ÝéU(ÍžÝáO/o&ÿ9ùq#ë (í°Ýé!€>F¸0#( ~þ (þ #ï]( ~þ (þ (#ï}“(  Õi&TÉÑÁÕ-a%ã}ͧoÉ*é!Ð~6o&ÉÍ|µÈ:Ýõ¯2ÝÍ!ñ2Ý}þÀÝá:зÈÝá_Ýá_ÕÍ{ѯ2Ý*Î|µÝåáíKÌíB "η ÕÕåÍÙÑz· Í^C User break+= Í I/OÍ Run-timeÍ error {͵Í, PC=*ÎͰÍNot enough memoryÍ Program aborted :Ø·Êm'ÃáÑÑé1!ÂòÿÍe!FK‚îBó>ÍÕçJÍ?͜ͻ4____________________MAILING_LABELS__________________ÍÎÍ ÍœÍ»4 version 3.2ÍÎÍ ÍœÍ»5 8th Jan 1987ÍÎÍ ÍœÍ»4 Mailing Label ProgramÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ»4 1986ÍÎÍ ÍœÍ»4 byÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ»4 J.FRANCIS & Co.ÍÎÍ ÍœÍ»4 52 Chester SquareÍÎÍ ÍœÍ»4 London, EnglandÍÎÍ ÍœÍ»+ SW1W 9EAÍÎÍ ÍœÍÎÍ ÍœÍ» !Í#!pÍ#Í»Hit > RETURN RETURN < to go Menu,ÍÎÍ ÍœÍ»* Hit > Q < to Quit to C/PM,ÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#Í !ºÍª!³òÍEÍ ÉÍ?!¼Í»ÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ» C return to C/PMÍÎÍ ÍœÍ»& Any other key to return to MenuÍÎÍ Íœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#Í !ºÍª!µòÍEÍ *µò&Íå}2µò*µò&å!CÑÍ€ËEÊõ,ÍD+*µò&å!CÑÍ“ËEÊ-É!¼Í»!Í#!@Í#Í»Line 1. This is a ÍÎÍ !¼Í»Í»Line 2. Test to ÍÎÍ !¼Í»Í»Line 3. Line up ÍÎÍ !¼Í»Í»Line 4. Your paperÍÎÍ !¼Í»Í»Line 5. Ready forÍÎÍ !¼Í»Í»Line 6. Your finalÍÎÍ !¼Í»Í»Line 7. Printout !!Í ÉÍ-!¼Í»!Í#!GÍ#ÍÎÍ Íþ+ÉÍ-!¼Í»!Í#!Í#ÍÎÍ Íþ+ÉÍ-!¼Í»!Í#!WÍ#!Í#ÍÎÍ Íþ+ÉÍ-!¼Í»!Í#!@Í#ÍÎÍ Íþ+ÉÍ?ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ»1 C = Clear printer bufferÍÎÍ ÍœÍ») X = eXit to C/PMÍÎÍ ÍœÍ». Q = Quit to Main MenuÍÎÍ ÍœÍ») B = douBlestrikeÍÎÍ ÍœÍ»& O = cOndensedÍÎÍ ÍœÍ»% E = EnlargedÍÎÍ ÍœÍ»" D = DraftÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#Í !ºÍª!²òÍEÍ *²ò&Íå}2²ò*²ò&å!CÑÍ€ËEÊŽ0Í-*²ò&å!XÑÍ€ËEÊ£0ÍD+*²ò&å!BÑÍ€ËEʸ0Íþ-*²ò&å!OÑÍ€ËEÊÍ0Í.*²ò&å!EÑÍ€ËEÊâ0Í<.*²ò&å!DÑÍ€ËEÊ÷0Ía.*²ò&å!QÑÍ€ËEÊ 1ÍD+ÉÍ?͜ͻ Only Type !Í#!pÍ#Í»"Y"!Í#!qÍ#Í» to the next question if ÍÎÍ ÍœÍ» the data is !Í#!pÍ#Í» CORRECT !!!!!!!!Í#!qÍ#ÍÎÍ ÍœÍÎÍ ÍœÍ» !Í#!pÍ#Í»Save data to disk (Y/N) ?!Í#!qÍ#Í ÍœÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#Í !ºÍª!²òÍEÍ *²ò&Íå}2²ò*²ò&å!YÑÍ€ËEÊu2ÍH$ÉÍ?͜ͻ%ENTER NAME AND ADDRESS, LINE BY LINE.ÍÎÍ ÍœÍ» or ÍÎÍ ÍœÍ»TYPE !Í#!pÍ#Í»"END"!Í#!qÍ#Í» in First Line TO FINISH ENTRYÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ»Enter First Line........? Í !8òÍÌ<Í�Í !8òÍ;ÍNENDÍŽå!8òÍ;ÍNendÍŽÑ}³oËEÊ›3ÍD+!8òÍ;ÍNENDÍ¡ËEÊŒ6!8òÍ;ÍNendÍ¡ËEÊŒ6͜ͻEnter Second Line........? Í !ûñÍÌ<Í�Í ÍœÍ»Enter Third Line........? Í !¾ñÍÌ<Í�Í ÍœÍ»Enter Fourth Line........? Í !�ñÍÌ<Í�Í ÍœÍ»Enter Fifth Line........? Í !DñÍÌ<Í�Í ÍœÍ»Enter Sixth Line........? Í !ñÍÌ<Í�Í ÍœÍ»Enter Seventh Line........? Í !ÊðÍÌ<Í�Í Í?ÍœÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í»NAME AND ADDRESS IS.....!Í#!qÍ#ÍÎÍ ÍœÍÎÍ !8òÍ;Íœ!Í«ÍÎÍ !ûñÍ;Íœ!Í«ÍÎÍ !¾ñÍ;Íœ!Í«ÍÎÍ !�ñÍ;Íœ!Í«ÍÎÍ !DñÍ;Íœ!Í«ÍÎÍ !ñÍ;Íœ!Í«ÍÎÍ !ÊðÍ;Íœ!Í«ÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í»+IF NAME AND ADDRESS ARE CORRECT PRESS!Í#!qÍ#ÍÎÍ ÍœÍ», > RETURN < To enter ÍÎÍ !³òÍÌÍEÍ Í 1ÉÍ?!jïåÍN MAILFILE.DATÍq!jï=ÍÍ !jïÍ{Í Ív2ÉÍ?ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ»4NN NN OOOOOOO TTTTTTTTTT EEEEEEEE ÍÎÍ ÍœÍ»4NNN NN OOOOOOOOO TTTTTTTTTT EEEEEEEE ÍÎÍ ÍœÍ»4NNNN NN OO OO TT EE ÍÎÍ ÍœÍ»4NN NN NN OO OO TT EEEEEEEE ÍÎÍ ÍœÍ»4NN NNNNN OO OO TT EE ÍÎÍ ÍœÍ»4NN NNNN OOOOOOOOO TT EEEEEEEE ÍÎÍ ÍœÍ»4NN NNN OOOOOOO TT EEEEEEEE ÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ».THE INITIALISATION OF THE DATA FILE WILL ERASEÍÎÍ ÍœÍ»  ALL EXISTING DATAÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ» DO YOU WISH TO CONTINUE Y/N ?ÍÎÍ Íœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#Í !ºÍª!²òÍEÍ *²ò&Íå}2²ò*²ò&å!YÑÍ€ËEÊ´9Í�6*²ò&å!YÑÍ“ËEÊÉ9Í!Í?ÉÍ?ÍœÍÎÍ ÍœÍÎÍ ÍœÍ»2THIS PROGRAM IS TO CREATE AND MAINTAIN A NAME AND ÍÎÍ ÍœÍÎÍ ÍœÍ»2ADDRESS FILE AND TO PRINT THE CONTENTS OF THE FILEÍÎÍ ÍœÍÎÍ ÍœÍ») IN A FORMAT SUITABLE FOR LABELS ! ÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ»+1. DO YOU WISH TO CREATE A NEW FILE ?ÍÎÍ ÍœÍÎÍ ÍœÍ»+2. DO YOU WISH TO ACCESS AN EXISTING FILE ?ÍÎÍ ÍœÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í»9YOU MUST ANSWER AS QUESTION 1 ON YOUR FIRST ATTEMPT !!!!!!Í#!qÍ#ÍÎÍ ÍœÍÎÍ ÍœÍÎÍ Íœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#Í !ºÍª!¶òÍEÍ *¶ò&Íå}2¶ò*¶ò&å!1ÑÍ€ËEÊ,<ÍÀ6*¶ò&å!2ÑÍ€ËEÊA<Í®%É!"hï!}2¸òÍò"hï*hïå!ÑÍ“}2¸ò*¸ò&ËEÊÂ=Íœ!Í#Í Í?! å! ÍÜ*hï™·íRÂùÍ?ÍœÍÎÍœÍÎÍœ!Í#!pÍ#Í»NAME AND ADDRESS SELECTED:-!Í#!qÍ#ÍÎÍœÍÎÍœÍÎ!8òÍ;Íœ!Í«ÍÎ!ûñÍ;Íœ!Í«ÍÎ!¾ñÍ;Íœ!Í«ÍÎ!�ñÍ;Íœ!Í«ÍÎ!DñÍ;Íœ!Í«ÍÎ!ñÍ;Íœ!Í«ÍÎ!ÊðÍ;Íœ!Í«ÍÎÍœÍÎÍœÍÎ͜ͻENTER OPTION REQUIREDÍÎÍœÍÎ͜ͻ 1. PRINT LABELÍÎ͜ͻ 2. SELECT NEW NAMEÍÎ͜ͻ! 3. RETURN TO MAIN MENUÍÎÍœÍÎÍœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#!ºÍª!¶òÍE*¶ò&Íå}2¶ò*¶ò&å!1ÑÍ€ËEÊAÍI'*¶ò&å!2ÑÍ€ËEÊ1AÍÃ=*¶ò&å!3ÑÍ€ËEÊCAÉ!ðÍ¥!8òÍÝÍ !ðÍ¥!ûñÍÝÍ !ðÍ¥!¾ñÍÝÍ !ðÍ¥!�ñÍÝÍ !ðÍ¥!DñÍÝÍ !ðÍ¥!ñÍÝÍ !ðÍ¥!ÊðÍÝÍ É!}2¹ò!jïåÍN MAILFILE.DATÍq!jï=ÍÍ?ÍK&!jïÍJËEÊØA!jïÍ{ÍœÍÎÍœÍÎÍœ!Í#!pÍ#Í»Input FIRST LINE to Recognize:!Í#!qÍ#ÍÎÍœÍÎ͜ͻ0"FIRST LINE " data MUST be exactly as seen !!!!!ÍÎ͜ͻ ^^^^ ÍÎÍœÍÎ!uòÍÌ<Í�!jïåÍN MAILFILE.DATÍq!jï=ÍÍB> !Í#!qÍ#!ºÍª!¶òÍE*¶ò&Íå}2¶ò*¶ò&å!1ÑÍ€ËEÊE!}2¹ò*¹ò&ËEÊ÷E!jïåÍN MAILFILE.DATÍq!jï=Í!ðåÍN mailfile.tmpÍq!ð=Í!jïÍ¥!8òÍ·!jïÍ¥!ûñÍ·!jïÍ¥!¾ñÍ·!jïÍ¥!�ñÍ·!jïÍ¥!DñÍ·!jïÍ¥!ñÍ·!jïÍ¥!ÊðÍ·!ðå!ðÍ^ÍÖ!uòÍ;!8òÍ;Í¡ËEÊÃEÍDA!jïÍJËEÊKE!jïÍ{!ðÍ{!jïÍ”!ðåÍN mailfile.datͦÉÍ?͜ͻ3____________________MAILING_LABELS_________________ÍÎÍ ÍœÍ»3 version 3.2ÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍÎÍ ÍœÍ»DO YOU WISH TO ÍÎÍ ÍœÍ»% 1. INPUT MORE NAMES ? !Í#!pÍ#Í»EDITORS!Í#!qÍ#ÍÎÍ ÍœÍ»3 2. PRINT OUT ALL LABELS ? Walter FrancisÍÎÍ ÍœÍ»3 3. PRINT OUT ONE LABEL ? Jules FrancisÍÎÍ ÍœÍ» 4. DISPLAY ALL DATA ?ÍÎÍ ÍœÍ» 5. CHANGE FONT ?ÍÎÍ ÍœÍ»% 6. ERASE ALL DATA ? !Í#!pÍ#Í» PROGRAMMER!Í#!qÍ#ÍÎÍ ÍœÍ»2 7. EXIT TO C/PM ? Jules FrancisÍÎÍ ÍœÍ» 8. DELETE a RECORD ?ÍÎÍ ÍœÍÎÍ ÍœÍ»% !Í#!pÍ#Í» ENHANCER &!Í#!qÍ#ÍÎÍ ÍœÍ»% !Í#!pÍ#Í»DEBUGGER!Í#!qÍ#ÍÎÍ ÍœÍ»3 Walter FrancisÍÎÍ Íœ!Í#!pÍ#Í» OPTION >> !Í#!qÍ#Í !ºÍª!¶òÍEÍ *¶ò&Íå}2¶òÍœÍÎÍ *¶ò&å!1ÑÍ€ËEÊJÍv2*¶ò&å!2ÑÍ€ËEÊ(JÍd(*¶ò&å!3ÑÍ€ËEÊ=JÍÃ=*¶ò&å!4ÑÍ€ËEÊRJÍÁ'*¶ò&å!5ÑÍ€ËEÊgJÍ€.*¶ò&å!6ÑÍ€ËEÊ|JÍÀ6*¶ò&å!7ÑÍ€ËEÊ‘JÍD+*¶ò&å!8ÑÍ€ËEʦJÍ®AÉÍ!ÍÍ9ÍøE*³ò&ÍååÍ‚!QÍ’ÍPËEÊ­JÍ?!å!ÍÜ͜ͻGExiting.............................................BYE For Now Folks!.ÍÎÍ !¼Í»!Í#!@Í#ÍÎÍ ÃÕ EÊ­JÍ?!å!ÍÜ͜ͻGExiting...........................ÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿóñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ MAIL32.LBR is an enhanced version of Mail1.LBR (Turbo Pascal) written Program for the creation of Labels . Facilities offered:- 1.Input of names 2.Print out of all labels 3.Print out of one label 4.Display all labels 5.Change of printer font 6.Erasure of all label data 7.Save label data to disk 8.Multiple copies of labels 9.Menu driven 10.Single key operation 11.Error trapping included 12.Deletion of incorrect data records This version is written for the Amstrad PCW 8512. The source file is included as well as the COM file. Below is listed address within the program where changes can be made to convert it for use on other machines running C/PM by using DDT ,ZAP35 or any other disc editor. ADDRESS OSBORNE01 AMSTRAD'S HEX CODES DESCRIPTION ++++++++++ ++++++++ +++++++++++++++++++ +++++++++++ 168 50 5A NUMBER OF COLUMNS ON SCREEN 169 18 1F NUMBER OF ROWS ON SCREEN 16B 02 1B 29 04 1B 45 1B 79 SEND AN INITIALIZATION TO THE TERMINAL. 17B 02 1B 28 06 1B 45 1B 48 1B 31 SEND A RESET STRING TO THE TERMINAL 18B 02 1B 3D 04 1B 59 00 00 CURSOR LEAD_IN STRING 1A2 01 1A 02 1B 45 1B 48 CLEAR SCREEN + HOME CURSOR 1A8 02 1B 48 HOME CURSOR 1AE 02 1B 4C 02 1A 4C INSERT LINE 1B4 02 1B 4D 02 1B 4D DELETE LINE 1BC 02 1B 4B 02 1B 4B ERASE TO END OF LINE 1C2 02 1B 28 02 1B 71 START HIGHLIGHTING 1C8 02 1B 29 02 1B 70 END HIGHLIGHTING W.T.FRANCIS LONDON,ENGLAND  02 1B 28 02 1ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååvÿø}MAIL.PASmßÿ šÿõÿòÿ�ÿoÿÄÿ–ÿ‘ÿ‹ÿúÿ“ÿºÿØÿ³ÿÖÿ !"#$%&×ÿ¶ÿˆÿÓÿ¾ÿžÿ±ÿ°ÿŒÿ›ÿ«ÿ'()*+,-./0123²ÿ�ÿœÿ­ÿ¹ÿŠÿ¼ÿ»ÿ™ÿ�ÿ¬ÿ˜ÿ456789:;<=>?@AÂÿ—ÿÑÿÎÿÍÿ¯ÿ�ÿ½ÿ¦ÿ’ÿªÿBCDEFGHIJKLMNOPQRùÿÌÿÁÿ·ÿÅÿ÷ÿ¸ÿ†ÿÉÿÈÿÀÿÊÿ®ÿ¨ÿ”ÿËÿûÿÜÿÏÿ„ÿ‚ÿöÿÃÿ‰ÿ‡ÿÞÿSTUVWXYZÇÿ ÿÝÿÆÿ§ÿ[\]^_`abcdeøÿæÿÐÿµÿÛÿÕÿÒÿ´ÿÚÿ…ÿôÿïÿìÿ¤ÿ¢ÿfghijklŽÿóÿîÿëÿÙÿÔÿ©ÿ¡ÿñÿíÿéÿåÿàÿÿþœíÅü(Ú[ܶÚÿø$=7?ÞÿñBqÆg_[Ág«Ô<¹Ô(û Ä#\ÍçžZ£8ûc¸©Ñw}�ͬÆ2ÔX†©ÆM‡GXœ¶Bq¶ ›á<Õ©F¸Ÿj„·©Fx™j„g©FxžðƒÚÿþìÃ?g³¦L«2…‹zÖ”iU¦€GØiO˜ï0X¡ÍñïÏ>üCqÖÝÍjüRcÓ_ÞÔè/§ýåTö]�ËþrªÑõ‡˰éz<‚6–Ž$gœ-æf°œ¡9yñ\Aº�‡Ms°é·øÄ®OÞŸŸ_(H÷Ë'SùäᄾÃ'ΰ9y~~_Aº�xX>y˜Ê''ô«Õ'ΰ=yÿì­‚t± ‡0p¹,»),1õ¸ì_‡%î.q˜š)àg'+H÷Ûþî:…ô,ÿ0ë·Ÿ8Ãêäý Ò}Äes–ÝÛ0…ÍTöúÿËe¹Ý†øÄžœ¼?© ÝGlúnºCØbÖoð‰3<ba:àrYvSXbê±é»©ìîú»C˜~ÿûfv˜–Í—›×?¼<¿À'ÎðÇ“÷ÏV�î#–ᦞ4—H¡{2=D¿Âes–˜z|øýï›ÙaZ6[\n^ÿðòüâgœqÆg{1_и„™µâ슎Úpé^ ¡8ƒt•Ж¼)â�ò_gM™ÊîÉ�©¹éð£üï˜ g�®Ú’7E„Ì_I znpÿì"fŤ«„¶äM!óö¿m ÎþáyÌŠ3HW mÉ›"Bþ߬Õ^›#R{E—b~ímÌŠ3HW mÉ…JhKÞ(TB[òF¡Ú’7 •Ж¼Q¨„¶ä�B%´%o*¡-y£8ƒt•Ж¼)"ä‡óŸx³â ÒUB[ò¦ˆ�WOcVœAºJhKÞ(TB[òF¡Ú’7Š3HW mÉ›"Bþé·g«eÓmÊþ ›ùYÌŠ3HW mÉ›"B¾y�Í) –ÿ´nŬ8ƒt•Ж¼)"äû47ãÜÔ‚9úÖŒ1+Î ]%´%oŠùþðúü5~MÌŠ3HW mÉŤ«„¶äM!ÿëõ5êøP[<À2LwË_bÝ ÞdŤԎÞË0eÅ™QqÆgœíÅ|AãZ¶•ЖgWtÔ†3H·ðbXŤk‡AM1kÊ´*S¨ã¬)ÓªLálÛL1+Î � �l1kÊ´*SÈŠ3HW mÉ›¢©¯ëé.=µáu«-ªSí ¯…¶ÚaçõðæL>ŽuSo²â Ò DoŠYS¦U™B½Òžýg*fM™Ve 9+Î ]%´¥bÖ”iU¦P‡ó”g�®ÚR1kÊ´*S¨ÃEÊŠ3HW m©˜5eZ•)Ôá~ÊŠ3HW m©˜5eZ•)ÔámÊŠ3HW m©˜5eZ•)ÔáeÊŠ3HW m©˜5eZ•)ÔáYÊŠ3HW m©˜5eZ•)ÔáyÊŠ3H·ðó�ŠYS¦U™BVœ�̨8㌳½˜/h\ Â’¬Pœ]ÑQÎ � v,fM™Ve u8OYqéµc1kÊ´*S¨ÃEÊŠ3H'¨‹YS¦U™B8ƒt‚Ú±˜5eZ•)ÔámÊŠ3H'¨‹YS¦U™B^¦¬8ƒt‚Ú±˜5eZ•)ÔáYÊŠ3H'¨‹YS¦U™Bž§¬8#3*Î8ãl/æ ׂÐûq§=)Î®è¨ g�náŰŠ3HwœÛù·§Åù‡úüCVœAºJhKÞò¯±nêë:.C³-»'Ø6SƒÕ²Ÿa[6gò^¬›z“g�®}4Ŭ)ÓªL¡Ž³¦L«2…³m3Ŭ8ƒt‚²Å¬)ÓªL!+Î � =µ–3H'È Å¤[«=h¾+fM™Ve Yqé~>P1kÊ´*SÈŠ32£âŒ3Îöb¾ q-[=ìÏgWtÔ†3H'È Å¤«„¶äMÎSVœ‘gœq¶ó�kA¸ÚXÅÙµá ÒUB[ò¦Hƒ­›zU7õoë¦þcVœAºJhKÞi°u8OYqé*¡-yS¤ÁÖá"eŤ«„¶äM‘[‡û)+Î ]%´%oŠ4Ø:¼MYqé*¡-yS¤ÁÖáeÊŠ3HW mÉ›" ¶ÏRVœAºJhKÞi°uxž²â ÒUB[ò¦HƒÍŠ32£âŒ³½˜/h\ Âf¾×4(Î®è¨ g�®Ú’7Š3HW m©@S_×ñá¼Âmkžb1ßk0Îñt¾† ZkAx�º©7Y-©½)6óýÓ¬8ƒt»¹À/�NÎaçØÌ÷O1Î9ƒt{¡�Uœ‘gœq¶ó�kAØêaïÛ§Š³+:jä[x1,„â ҵà�¦˜5eZ•)ÔqÖ”iU¦p¶m¦˜g�NÐ@¶˜5eZ•)dÅ™ =µ–3H·ÕÃþ\q¶6V{Ð|WÌš2­Ê²â Ò-ü| ³¦L«2…¬8ƒt•Ж¼QœAºJhKÞò¯±nP_£ŽµÅ¦Y.ËæIÀ2LwËîL¾‹uƒz“g�NP;zS,ÔgdFÅgœíÅ|AãZ.…6¶õ^qvEGm8ƒt /†…PœAºJhKÞq:Õöb~í-*í=öB‹Á¶flňó··ø=î?»½…o¯ÈˆYqé*¡-y£8ƒt•Ж¼)âtJÀ^hc�ùÚBöí‚Fìæ-°ÚXÈZmŽÀ|³â ÒUB[ò¦ˆÏൡØ“´Yœ¢5#pþ‹ÓV´ KbÀž´Yœža:ÕCÌŠ3HW mÉ›"êö”0Ò®]{‹�¬ÕæÌw¸�ãÜâ¶µBÃ^hcI g1+Î ]%´%oŠXó5Péáv daO Xœ¶¢]XÀ°oÚ�Ý\ �Yqé*¡-ySÄQïv$ÈX|mýš0ØÍL+ļ"ß^‘jì=µÁSû•bVœAºJhKÞ±niÚ#ÚÀž®ÖÞ“ÕWóVŒ°s¼n½%¬DkzˆYqé*¡-y£8ƒt•Ж¼)"ä_cÝÔ×u¼\†Ã›f¹,›'Ë0Ý-;L=6}7•Ý]@¬Ô›¬8ƒt‚ÚÑ›b¦¬8ƒt /†…PœAºãÜο=-Î/ê‹Yqé*¡-yS4õu DàK”è0¡D‡'ø.Ǻ©7YqéÚaÐGSÌš2­Êê8kÊ´*S8Û6SÌŠ3H'h [Ìš2­Ê²âLОZˤ[’Š3HW mÉ…JhKÞ(Î Ý^hcgkcµÍwŬ)ÓªL!+Î ÝÂÏ*fM™Ve YqFfTœqÆgœíÅ|AãZ^­µUœ]ÑQÎ^ ¡8ƒt•Ж¼QœAºJhKÞò/µÅ,Ãt·ìðvŽã32ë:fŤ«„¶äM!ÿòP[<€|÷ ÀØ9^­µ…�có›ËY³â ÒUB[òFqé*¡-M}]Çþr*û ÖM½É ‚Ú±xs5ÖË0eÅ™QqÆgœíÅ|AãZ^­µ½Pœ]ÑQÎ Ý‹a!g�®Ú’7…lVœAºJhKÞ(Î ]%´%o*¡-y£P mÉ…JhKÞ(Î ]%´%oŠù_@�] ;Çæ7—³˜g�®Ú’7E„¼×˜§˜ÛSxCOaç€ »vŽ™uÌŠ3HW m©hP_£ŽýåTö<@¬Ô›¬ ¨‹7Wc½™eŤÛÌ�¬÷‹v b3ËŠ3H§wØÌp‚¸‰°§dðj­­â Òé63|y€¸‰°§d8#3*Î8ãl/æ ׂ°ñÔ ÅÙµá ÒUB[ò¦ðƒ­ÔÛ1iC8?Ãtªè-bVœAºJhKÞ~°5佘´!\œa¢ÁÂÎĬ8ƒt•Ж¼)ü`kÈ{1iC¸†¤ a½G²â ÒUB[ò¦ðƒ­!ïŤ áínæk�}»'³â ÒUB[ò¦ðƒ­!ïŤ áå–ÔŽO±›‹ˆ¬8ƒt•Ж¼)ü`kÈ{1iCxv†›ùZ`§MëcVœAºJhK…l ù8&mÏÏp)´±óµÅ÷ï1+ÎÈŒŠ3Î8ãl/æ ׂ°�¯¯< Vè7¤8»¢£6œAº…§V(Î ]%´%o ?غA�g�îÕZÛ Å™QqÆÙ^Ì4®a37#™�FÅÙµá Ò-<µBqé*¡-ySøÁÖ ê'ÈŠ3H÷j­í…âŒÌ¨8㌳½˜/h\ B0¾GgWtÔ†3H·ðÔ Å¤«„¶äMá[7¨¢.³â Ò½Zk{¡8#3*Î8ãl/æ ׂ°íÎ*Î®è¨ g�nᩊ3HW mɛ¶nêmVœAºWkm/gdFÅgœíÅ|AãZfdÖogWtÔ†3H·ðbXŤ«„¶ä�â ÒUB[òFqé*¡-y£8ƒt•Ж¼)"ä¯78ÁÆS+°ÚX¸Zïv$bVœAºJhKÞò׿àô‹¶°sl~s9‹Yqé*¡-ySDÈ_¿Â ^­µ…�cÖjƒ™uÌŠ3HW mÉ›"Bþú'çëkOƒú Ŭ8ƒt•Ж¼)"ä¯{œ`Ñ›‘Ì@cÌŠ3HW mÉ›"Bþ:àÁøViŒYqé*¡-ySDÈ_oq‚­hw6fŤ«„¶ä�â ÒUB[òFqé*¡-y£8ƒt•ЖŠõ5êØ_NeßáÁĺA½É ‚Ú±xs5Ö7]VœAº›�N°Þ/Ú�Š›.+Î ën:œÄM„=%ƒ�§V(Î ën:œÄ_"ì)¼Zk«8ƒ|¬w¸ép¯#ì)lçë+Oƒú )Î ën:œÄ>ž’ÁfnF2�Š3ÈÇz‡›'1DØS2Æ·âH£â ò±Þá¦ÃIÜFØS2ØŠvgg��õ7Nâ«{J¯ÖÚ*ÎÈŒŠ3Î8ãl/æ ׂph¿’â슎Úpé^ ¡8ƒt•Ж¼)"zãŸbzº'ĺ©¯ëøÓÍO±nêM;‡=%úfñOk¬žèbVœAºJhKÞò±=%Œ­m¡ĺ©¯ëˆM¿\†Í„ïòW±nêMVœAºJhKÞ(Î ]%´¥"BòX7õuíWÂØÚvŽQoPÜü¦Ëxë¦ÞdŤ«„¶ä�ª„¶ä�â ÒUB[*Ôרc9•}‡ëõ&+jÇâÍÕXßtYqén:<:Áz¿h*nº¬8ƒtz‡›'ˆ7ö” ¶•Жg�ÚpéÈŒŠ32£âŒ3Îöb¾ q-Í~OfTœ]ÑQÎ Ý‹a!g�®Ú’7E Ý–èšY@ÓmÑl·Ëp8ÔHep}ƒTvá,fŤ«„¶äM!ÿy. ÿ9fŤ«„¶äM§›Ë€X7õu Ýö§X7õ¦ŽÐ+-‹¤ S�UÙ•‡‡Ý´¼‰Yqé*¡-y£P mÉŤ«„¶TÄ`, ¬´,€¤ �ÉÇ/³‚ vô¦ç)+Î �Þ¡ç 'ˆ¡ÛÆŒ¹@ÎNÉŒö” ^­µUœA:½C8Oøò1tÛ{JWtÔ†3H§wç _ ’#ì)\ÑQÎ ]%´¥"cIà@‹¹�¤ �ÉÇ/³‚ vô¦)+Î ]%´¥"cI`:Õb�´¡3ùøbVÔŽÞá~ÊŠ3HW m©ˆÁXXÍמI:“�_ fAíèMÞ¦¬8ƒt•ЖŠŒ%�•ÞÙSI:“�_ fAíèM^¦¬8ƒt•ЖŠŒ%�ƒþfO$mèL>~�˜µ£7Ex–²â ÒUB[*b0–ô•Œ=EÒ†ÎäãˆYAP;zS„ç)+Î Ý‹a!g�®Ú’7 •Ж¼QœAºJhKÞM}]Ç®™4ÝÍv» ‡ÊÙt±nêMVœAºJhKÞ(Î ]%´%oŠpž²â ÒUB[ò¦)+Î ]%´%oŠp?eŤ«„¶äMÞ¦¬8ƒt•Ж¼)ÂË”g�®Ú’7Ex–²â ÒUB[ò¦ÏSVœAºJhKÞ(Î ]%´%oЦ¾®c¹ºf€¦ÛÍv» ‡Ð,°é—˰™€Ëe8bÝÔ›¬8ƒt•Ж¼)"äÿ<À2LwË_Ls�±$³â Ò jGoŠe˜²â Ò íWRœA:2£â Ò‘gdFÅg{1_и„ Úa-HqvEGm8ƒt /†…PœAºvôѳ¦L«2…:Κ2­Êζͳâ Ò ª„¶TÌš2­Ê²â Ò-ü| bÖ”iU¦�g�®ÙïÉŒŠ32£âŒ3Îöb¾ q-U;íIqvEGm8ƒt /†…PœAºJhKÞ(TB[òF¡Ú’7Š3HW mÉ›"v¤ë:È{½üä½I2HäcĬ8ƒt•Ж¼)b×u�ïºÒõò3¤›$ƒtA>FÌŠ3HW mÉ›"vò€®ƒt}éúòó4A~òW1+Î ]%´%oŠØuè: ë ]ßCº¾‡üFÌŠ3HW mÉ…JhKÞ(Î ]%´%oŠ8= (»r*›Tš©ì;ô+L¶ÍÔ`U¦€×eJËæbVœAºJhKÞò/MJ¿”‡©ìž`ÛLMÌŠ3HW mÉŤ«„¶ä�B%´%oŠˆm�›þ¯ËÃCL=6}7•Ý]ÀÍo:¼ˆYqé*¡- êkÔ±¿œÊ¾Ãƒˆuƒz“µcñæj¬oº¬8ƒt7�`½_´7]VœA:½ÃM‡Ä›{JA´ÃZ�â Òén:|y€xaOÉ`Ff­8ƒt /†…Pœ‘gœq¶ó�kA˜‘YßWœ]ÑQÎ Ý‹a!g�®Ú’7 •Ж¼QœAºJhKÞqzXp¹ìŸ,›Ê¦›eh¦€¦ÛbÖ”ÝÔ”tÍ, é¶ˆYqé*¡-y£8ƒt•Ж¼)b³Ý.Ãá€U™šn‹©Çå²ì&L6}7…n: _az°*SˆYqé*¡-y£8ƒt•Ж¼)"¤+;4XõËY3ápWNÍu XõK¤æ:¤¾ˆYqé*¡-y£P mÉ…JhKÞ(TB[òF¡Ú’7Š3HW mÉ›"žŸaÛ㦿ÃëòðS�Í24S@ƒ.¼ÆªLòW/bVœAºJhKÞ(Î ]%´%oŠxq†m�›þ¯ËÃCL=šÍ&h:„_ÊÃTvO°*SÀ‹˜g�®Ú’7 •Ж¼QœAºJhKÞM}]Ç›þ³»Ã„¦;¼K4¼º ‡©ì;œ£ïpÓß-±*—‡ Í4…Ùå„ïÒÅ!º©7Yqé*¡-y£*¡-y£8ƒt•ЖŠõ5êØ_NeßáÁĺA½É ‚Ú±xs5Ö}×gŤë»þÑÉz¿h*ú®ÏŠ3H§wè»'ˆçö” :ªvÚ“â Òéú®Ç âE„=%ƒÞ�;íIqFfTœqÆÙ^Ì4®¡ìƒs¡8»¢£6œA¾ëÖ·�N>(Î ß•}�N°ký@Š3ÈwÝú�NPö‚†µ·Š3Èwe„À£Ýú_àCVœA¾Ó;”}ö” gWtÔ†3È{•ЖŠÅ©(žç¬8ƒ¼·ðbXÅä½ãÜο=-Î?Ôç²â òÞ¢Ýúóg�÷~÷óÏ�P m©X†M�/�¤‹uS_×±D‡KÜa°Eƒ € D‡ z,±DÀS¬›z“g 3*Î ïUB[òFUB[òFqy¯Ú’7E„d7ó5A¸&mŽX’] C#¦9¦S¬);ÌBw‡ï’Ǭ8ƒ¼W mÉ›"BþËôtOhÍS¼¡§°s,æÆj³¦3ÉbVœAÞÔŽÅ›«±þ#=ÍŠ3È{í0è£)fM™Ve uœ5e:Ûô³˜g�÷è-Ö–ŠYS¦U™BVœAÞ#3*ÎÈŒŠ3Î8Û‹ù‚Ƶ \ mìÜ�â슎Úpöñwå>qéÚaÐGSÌš2­Êê8kÊ´*S8Û6SÌŠ3H'h [Ìš2­Ê²â Ò-¼Bq&hO­å Òmõ°?Wœ­�Õ4ß³¦L«2…¬8ƒt ?¨˜5eZ•)dŤ«„¶ä�B%´%og�®Ú’7Eƒúu,Í~m±*—‡ ©ììKZÌ�Fÿ™źA½ÉŠ3HW mÉŤ«„¶äMZ•ËÄTv?alm‹ÙÝaÂ�¾µ 럢0|—.fŤ«„¶äM!ÿöŸòbVœAºJhKÞ(Î � vô¦X†MVœAºvôѳ¦L«2…:Κ2­Êζͳâ Ò È³¦L«2…¬8´§ÖrVöa¹ì—Š3H'¨‹YS¦U™BÎSVœA:AíXÌš2­Êêp‘²â Ò jÇbÖ”iU¦P‡û)+Î � v,fM™Ve ux›²â Ò jÇbÖ”iU¦P‡—)+Î � v,fM™Ve ux–²â Ò jÇbÖ”iU¦P‡ç)+ΰ6V{,Ã'á<)ΰðbXŤ«„¶ä�B%´%og�®Ú’7ES_×±kfM·E³Ý.Ãá€CHa3…í£?ĺ©7Yqé*¡-y£P mÉŤ«„¶äMÎSVœAºJhKÞá"eŤ«„¶äM8ƒt•Ж¼)ÂÛ”g�®Ú’7Ex™²â ÒUB[ò¦ÏRVœAºJhKÞáyÊŠ3HW mÉ…JhKÞ(Î ]%´%oŠº),Ñ_Neßa^ݕ˰�Yqé*¡-y£8ƒt•Ж¼)"$;?.—e7!5×!Ŭ8ƒt•Ж¼)"$»8!…Í„.¼F×ÌBÌŠ3HW mÉ›"B²ûgÀ2LwËS�YSv˜…î.fŤ«„¶ä�â ÒUB[*Ôרc9•}‡ëõ&+jÇâÍÕX÷]Ÿg�®ïúG'Xïí@EßõYqéô}×ãñ<ž’Áf¾×4@qéô}×ãñ"ž’Á¥ÐÆÎ )Î �Þ¡ïzœ Þ�°§d8ûø»òß?qFfTœqÆÙ^Ì4®áµ°·­öг+:jä«„¶TܶÚï´§‹:œ§¬8ƒt•ЖŠÛVû�ötQ‡‹”g�®ÚRqÛj¿Óž.êp?eŤ«„¶TܶÚï´§‹:¼MYqé*¡-·­ö;íé¢/SVœAºJhKÅm«ýN{º¨Ã³”g�®ÚRqÛj¿Óž.êðšbÖ”iU¦PÇYS¦U™ÂÙ¶™bVœA:AÙbÖ”iU¦�g‚öÔZÎ ]Ù!æBqéµc1kÊ´*S¨ÃyÊŠ3H'¨‹YS¦U™B.RVœA:AíXÌš2­Êêp?eŤԎŬ)ÓªL¡oSVœA:AíXÌš2­Êêð2eŤԎŬ)ÓªL¡ÏRVœA:AíXÌš2­Êêðšâ¶Õ~§=]Ôñ¶Õ~§=�ÙÛ}ÌŠ3H'¨ÚRqÛj¿Óž.²âLОZˤԎŬ)ÓªL¡ç)+Î � v,fM™Ve u¸HYqéµc1kÊ´*S¨Ãý”g�NP;³¦L«2…:¼MYqéµc1kÊ´*S¨ÃË”g�NP;³¦L«2…:+Î ]ßõ�NÖûE;PÑw}VœAºJhKÞ(Î �Þ¡ïzœ žGØS2hö{2£â Òéú®Ç âE„=%ƒK¡�m½WœA:½Cßõ8A¼aOÉàRhcç†g�NïÐw=NßFØS2ØêaïÛ§Š3H§wè»'ˆ/#ì)ÌȬß*Î �Þ¡ïzœ >‹°§dÐQµÓžg�NïÐw=NŸGØS2xµÖVqéô}×ãñ‡{JKº�%Å™QqÆgœ]ÑQÎ ÝŒÌZqéfdÖ÷g‚öÔZÌȬ/gkcµÇz¿h*–aÊÐ�¯â? 8ƒt /†…PœA¾;ÎíüÛÓâ¼>™g�®Ú’7E ß´Õæx&ÿp}°š tó «¹3|?‹Yqé*¡-ySøÁÖM½ÍŠ32ãÙÿJ÷ÿL¶ÍÔ`U¦€×eJËæbVœAºJhKÞò/MJ¿”‡©ìž`ÛLMÌŠ3HW mÉÅåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå This is the release date of the disk. !K"Kÿÿ$K%K&K'K(K)Kÿÿ+K,K-K.K/Kÿÿÿÿ2K3K4K5K6K7K8K9K:K;KK?K@KAKBKCKDKEKFKGKHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK[K\K]K^K_K`KaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzK{K|K}K~KK€K�K‚KƒK„K…K†K‡KˆK‰KŠK‹KŒK�KŽK�K�K‘K’K“K”K•K–K—K˜K™KšK›KœK�KžKŸK K¡K¢K£K¤K¥K¦K§K¨K©KªK«K¬K­K®K¯K°K±K²K³K´KµK¶K·K¸K¹KºK»K¼K½K¾K¿KÀKÁKÂKÃKÄKÅKÆKÇKÈKÉKÊKËKÌKÍKÎKÏKÿÿÑKÒKÓKÔKÕKÖK×KØKÙKÚKÛKÜKÝKÞKßKàKáKâKãKäKåKæKçKèKéKêKëKìKÿÿîKïKðKñKòKóKôKÿÿöK÷KøKùKúKûKüKýKþKÿKLINPUT .INC 9E B7 3584 28 INPUTSCR.INC 93 02 896 7 INSTALL .PAS 53 F1 2944 23 IOERR .INC 5F 6E 1408 11 MAINBODY.PAS A0 B2 3968 31 MENU .PAS 89 2B 4736 37 NEWFILE .PAS 4A DE 1408 11 PRINTER .PAS B5 12 9216 72 PRINTREC.INC 87 CA 896 7 READ0 .INC AE 47 384 3 READKEY .INC 6D 02 1408 11 RETRIEVE.PAS 36 3E 7808 61 SETCARD " Fog Library Disk FOG-CPM.166 Copyright (1987) 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. Disk 2 of 2. Conclusion of Cardfile as well as two other small menu-driven programs. Filename Description -03-00 .87 This is the release date of the disk. -CPM166 .DOC This is the description of the disk contents. DATASCR .INC F6E3 3K [Cardfile 16 of 44] DISPLSCR.INC 9E03 1K [Cardfile 17 of 44] EDITSCR .INC D54B 7K [Cardfile 18 of 44] EXTRACT .PAS 47C5 12K [Cardfile 19 of 44] FILECARD.NOT D34A 11K [Cardfile 20 of 44] GETCARD .INC 8DF9 1K [Cardfile 21 of 44] HELPSCR .INC FB6F 2K [Cardfile 22 of 44] INITVAR .INC EDC2 1K [Cardfile 23 of 44] INPSCR .INC 498C 1K [Cardfile 24 of 44] INPUT .INC 9EB7 4K [Cardfile 25 of 44] INPUTSCR.INC 9302 1K [Cardfile 26 of 44] INSTALL .PAS 53F1 3K [Cardfile 27 of 44] IOERR .INC 5F6E 2K [Cardfile 28 of 44] MAINBODY.PAS A0B2 4K [Cardfile 29 of 44] MENU .PAS 892B 5K [Cardfile 30 of 44] NEWFILE .PAS 4ADE 2K [Cardfile 31 of 44] PRINTER .PAS B512 9K [Cardfile 32 of 44] PRINTREC.INC 87CA 1K [Cardfile 33 of 44] READ0 .INC AE47 1K [Cardfile 34 of 44] READKEY .INC 6D02 2K [Cardfile 35 of 44] RETRIEVE.PAS 363E 8K [Cardfile 36 of 44] SETCARD .INC 3957 1K [Cardfile 37 of 44] SORTFILE.PAS A4C0 5K [Cardfile 38 of 44] TEMPLATE.PAS 1008 1K [Cardfile 39 of 44] UNDELETE.PAS F5F6 4K [Cardfile 40 of 44] VARIABLE.INC 7BFA 2K [Cardfile 41 of 44] WRITREC .INC 7C37 1K [Cardfile 42 of 44] WRTCARD .INC E9D4 1K [Cardfile 43 of 44] WRTTAG .INC D327 1K [Cardfile 44 of 44] CHOOSE .COM 8D4C 13K [Choose 1 of 3] Choose helps you make your decisions by assigning weights to your priorities and calculating your best alternatives. Pascal source code is included (Squeezed). CHOOSE .DOC 9172 3K  [Choose 2 of 3] CHOOSE .PQS D193 7K [Choose 3 of 3] MAIL .COM F22E 19K ver. 3.2 [MAIL 1 of 3] Menu driven program to create mailing labels. Includes documentation and patch points for terminal installation. Comes complete with Turbo Source code (squeezed). MAIL .NOT DA92 2K ver. 3.2 [MAIL 2 of 3] MAIL .PQS F372 10K ver. 3.2 [MAIL 3 of 3]  Pascal source code is included (Squeezed). CHOOSE .DOC 9172 3K ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå#ååååå$ååååå%ååååå&ååååå'ååååå