LBSOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUNDINVALID KERNEL FILExةw,@  4  J  ȱ⩤i8#) ) 8LeO^ڮZS%SEG.T jŸ/ )PRINT.ALL -READ.ME.FIRST O,V.05.93.NOTEP"+ }>REARRANGE*SOS.DRIVER s4Z*SOS.INTERP 4ke! *SOS.KERNEL ,V!aDISKNAME.DATqFLASHNAME.DATG w III.BLM.062528Au' +ASCIDIF.AW3)*"+ASCIDIF.DOC?."/,ASCIDIF.TEXT/\!*HELLO.TEXTeOOHELLO g / *MENU.MAKER im#im#iЛ#Lȱ  6L憦  Lsmm l y` @8(Je稽 ʈ  !"#$%&'TUVWXYZ[\]^_'nsfer this program or its '); *writeln ('documentation or its license to another party in ', 3'exchange for money or other '); *write ('valuable consideration without the express writte', 3'n approval of Allan M Bloom. '); end;  procedure noti('You may use this program and its documentation as', 3' you desire for your own use.'); *writeln ('You may give this program and its documentation t', 3'o anyone else who agrees to '); *writeln ('accept the terms of this license. You may not tra', 3*writeln ('use, copy, or transfer the program or its documen', 3'tation (or any copy) in whole'); *writeln ('or in part, except as expressly provided for in t', 3'he following license: '); *writeln; *writeln ('LICENSE:'); *writeln; *writeln aws'); *writeln ('of the United States. All rights are reserved by ', 3'Allan M Bloom, who provides '); *writeln ('this program and licenses its use in the United S', 3'tates and abroad. You may not'); 8end; * procedure NOTICE (pgm,year: string); 2{Full screen copyright notice 03/88} var *wk_char: char; procedure notice1; begin *writeln ('This program and its accompanying documentation a', 3're copyrighted under the le_id: 0..255; 8aux_id: packed array [0..1] of 0..255; 8sto_type: 0..255; 8eof: packed array [0..3] of 0..255; 8unused: packed array [0..1] of 0..255; 8stuff: packed array [0..3] of 0..255; *y_offset: integer; *ok: boolean; *err_str1: string; *err_str2: string; *err_str3: string; *err_str4: string; *err_char: char; *retcode: integer; *filelist: packed record 8attr_byte: 0..255; 8filing; *wk_str3: string; *wk_real1: string; *wk_result: integer; *in_count: integer; *up_arrow: char; *down_arrow: char; *left_arrow: char; *right_arrow: char; *cr: char; *x_offset: integer; lock: fileblock; *inpath: string; *outfile: text; *outpath: string; *tuples: integer; *vectors: integer; *i,j,k: integer; *wk_char: char; *wk_str: string; *wk_str1: string; *wk_str2: str = packed array [1..1025] of char; fileblock = record :BUF: buftype; :LEN: integer; :PTR: integer; :EF: boolean; :REC: str255; :end; *filetp = file; *filetype = file;  " var infile: filetp; *inb{$list} program ASCIDIF;{ASCII text file to standard DIF format....AMB 04/12/88} *{Modified 05/09/93: Put numeric fields out in DIF numeric fmt } {$list-} uses dirstuff, sosio; {$list+} type str255 = string [255]; buftypece2; begin *writeln; *writeln ('A certified nonprofit organization may distribute ', 3'the program and documentation'); *writeln ('at its current rate for public domain software. An', 3'y such organization must give'); *writeln ('proof, upon demand by Allan M Bloom, of its status', 3' as a nonprofit organization '); *writeln ('under applicable sections of the United States Int', 3'ernal Revenue Code. Another '); *writeln ('Party may negotiate a distribution licensetr3: string; *wk_str4: string; *wk_char: char; *ok: boolean; *x,y: integer; *curs_at_eol: boolean; * procedure BLANK0 (var strg: string); var i: integer; begin repeat -if length (strg) = 0 then open without user interface. } 3{ } 4 var error_num: integer; *i: integer; *user: boolean; *wk_str1: string; *wk_str2: string; *wk_s3{ QUIT exits the program with a null pathname. } 3{ } 3{ Modified 11/13/83 AMB 1. Don't scroll on error. } 3{ 2. If pathname starts with "**" } 3{ athname forever. If none exists, } 3{ the user may exit abnormally: } 3{ } 3{ ABORT causes an EXIT(PROGRAM) to be issued. } EN (fname,dspname,'RESET/REWRITE',pathname) } 3{ END; } 3{ } 3{ Under normal conditions this proc will try to } 3{ get a valid p } 3{ PROCEDURE open_rec; } 3{ TYPE FILETYPE = FILE OF whatever; } 3{ BEGIN } 3{ OP3{ should be the default for a program generally. } 3{ } 3{ A file of records must generally have its own } 3{ sub-procedure to use OPEN: } 3{ filename } & 3{Notes: The calling program/procedure must have a TYPE } 3{ variable called FILETYPE. If "TEXT," OPEN will } 3{ work for both TEXT files and UNTYPED files. This } {English title of for display } 4IO_METHOD: string; {Either RESET or REWRITE. } 4var PATHNAME: string); {In: Default PATHNAME or null} N{Out: Actual PATHNAME if OK. } N{ Null String if QUIT from proc } 3{Open a supplied chr (18)); end; procedure normvideo; begin write (chr (17)); end; procedure XOPEN (var FILENAME: FILETYPE; {FILENAME: Internal name of file} N{FILETYPE:User-defined data TYPE} N{ for the file. } 4DISPLAY_NAME: string; right_arrow := chr (21); cr := chr (13); end; (*scrn_parm*) procedure clrscr; begin gotoxy (0, 0); *write (chr (28)); end; procedure clreol; begin write (chr (31)); end; procedure inverse; begin write (ear (1); *gotoxy (0, 0); *write (chr (28)); end; {NOTICE} procedure scrn_parm; begin x_offset := 1; y_offset := 1; up_arrow := chr (11); left_arrow := chr (8); down_arrow := chr (10); egin *gotoxy (0, 0); *write (chr (28)); *writeln ('Program ', pgm, ', copyright ', year, 3' by Allan M Bloom'); *writeln; *notice1; *notice2; *unitclear (1); *gotoxy (66, 23); *write ('PRESS ANY KEY'); *read (keyboard, wk_char); *unitcl with Al', 3'lan M Bloom by contacting him'); *writeln ('at 2303 San Marcos Street, Blacksburg, VA 24060. Y', 3'ou must reproduce and include'); *writeln ('this copyright notice and license on any copy of a', 3'll or part of this program. '); end; b begin 0i := 0; 0end -else begin 0i := pos (' ', strg); 0if i > 0 then delete (strg, i, 1); 0end; -{endif} *until (i = 0); end; {BLANK0} procedure UPPERSTR (var str: string); var i: integer;  begin for i := 1 to length (str) do .if ord(str[i]) in [97..122] 1then str[i]:= chr(ord(str[i]) - 32); .{endif} *{end for i} end; {UPPERSTR} begin upperstr (IO_METHOD); *upperstr (PATHNAME ); *blank0 (IO_METHOD); *blank0 (PATHNAME )*unitclear (1); *gotoxy (0,23); *if length (s) > 65 then s := copy (s, 1, 65); *write (chr(30), chr(7), s); *gotoxy (66, 23); *write ('PRESS ANY KEY'); *read (keyboard, wk_char); *unitclear (1); *gotoxy (0, 23); *write (chr (30)); *err_23 :=ANY KEY'); 0read (keyboard, wk_char); 0end; -{endif} *until success; *write (chr (30)); *unitclear (1); *YN_23 := wk_char; end; {YN_23} function ERR_23 (s:string): char; {Err msg at screen bottom. AMB 10/85} var wk_char: char; begin 0success := true; 0end -else if default in ['Y','N'] then begin 0wk_char := default; 0success := true; 0end -else begin 0unitclear (1); 0gotoxy (0, 23); 0write (chr(30), chr (7), 'Please answer "Y" or "N."'); 0gotoxy (66, 23); 0write ('PRESS N) --> '); -if default in ['Y','N'] then begin 0write (default); 0gotoxy (78,23); 0end; -{endif} -read (keyboard, wk_char); -if wk_char in ['Y','y','N','n'] then begin 0if wk_char > 'Y' then wk_char:= chr (ord (wk_char) - 32); ccess: boolean; begin *if default > 'Y' then default:= chr (ord (default) - 32); *repeat -unitclear (1); -success := false; -gotoxy (0, 23); -if length (s) > 66 then s := copy (s, 1, 66); -write (chr(30), s); -gotoxy (66, 23); -write ('(Y | if wk_char in ['A', 'a'] then begin 3close (FILENAME); 3ok := sos_terminate; 3exit (program); 3end; 0{endif} 0end; *until error_num = 0; *{$iocheck+} end; {OPEN} function YN_23 (s:string; default: char): char; var wk_char: char; *su0wk_str4 := ' or A to abort this program'; 0write_error (wk_str1, wk_str2, wk_str3, wk_str4, 3[chr(13),'q','Q','a','A'], wk_char); 0if wk_char in ['Q', 'q'] then begin 3PATHNAME := ''; 3error_num := 0; 3close (FILENAME); 3end; 0{endif} 0> 0 then begin 0user := true; 0get_pas_error (error_num, wk_str1); 0wk_str1 := concat (PATHNAME, ' is invalid. ', wk_str1); 0wk_str2 := 'Press RETURN to retry'; 0wk_str3 := ' or Q to quit with no file'; (error_num > 0) 0and (pos ('.TEXT', PATHNAME) = 0) then begin 4wk_str1 := concat (PATHNAME, '.TEXT'); 4reset (filename, wk_str1); 4error_num := ioresult; 4if error_num = 0 then PATHNAME := wk_str1; 4end; 0{endif} 0end; -{endcase} -if error_num <= '' then begin 0error_num := 0; 0writeln; 0writeln ('No file'); 0end -else if IO_METHOD = 'REWRITE' then begin 0rewrite (FILENAME, PATHNAME); 0error_num := ioresult; 0end -else begin 0reset (FILENAME, PATHNAME); 0error_num := ioresult; 0if 0ok := prompt_for_filename (wk_str1, x, y, 6PATHNAME, curs_at_eol); 0if not ok then PATHNAME := ''; 0i := length (PATHNAME); 0if length (PATHNAME) > 0 then 3if PATHNAME [i] = '.' then delete (PATHNAME, i, 1); 0{endif} 0end; -{endif} -if PATHNAME THNAME, 1, 2); -user := false; -end; *{endif} *x := -1; *curs_at_eol := false; *dot_text_code := false; *repeat -if user then begin 0wk_str1 := concat 0 ('Enter pathname of the ', DISPLAY_NAME, ': '); 4 := 'Press RETURN to exit program.'; -write_error (wk_str1, wk_str2, wk_str3, wk_str4, 9[chr(13)], wk_char); -ok := sos_terminate; -exit (program) -end; *{endif} *{$iocheck-} *user := true; *if copy (PATHNAME, 1, 2) = '**' then begin -delete (PA; *if (IO_METHOD = 'REWRITE') or (IO_METHOD = 'RESET') -then *else begin -wk_str1 := 'Procedure OPEN error: Invalid IO_METHOD parm'; -wk_str2 := concat ('I/O method passed = "',IO_METHOD,'".'); -wk_str3 := 'Fix the calling program, please.'; -wk_str wk_char; end; {ERR_23} function INTSTR (strg: string): integer; 3{Integer representation of numeric string AMB 11/26/84} 3{ } 3{strg: numeric string, max length 5 digits, } 3{ optional leading minus sign. } 3{ } 3{returns: 0 if non-numeric or length > 5 characters } k); } { | end; (*while*) } { ------------------------------------------------------------------ } { } { Modifie | readasc (infile, inblock); } { readln (infile, inline); | while (not inblock.ef) do begin; } { ...... | ...... } { UNTIL eof (infile); | readasc (infile, inbloc{ } { To read as an ASCII file, replace "readln" code: } { ------------------------------------------------------------------ } { REPEAT infile" normally, enter the following: } { inblock.ptr := 0; } { inblock.ef := false; } } { var infile: filetyp; } { inblock: fileblock; } { } { After you open ",end; ){endif} end; {NUMERIC} {READ_ASC: Include text for high-speed read of ASCII files AMB 01-09-85} { } {TO USE: Declare your ascii input file like this: 3end 0else if txtline [i] = '.' then begin 3dot_ct := dot_ct + 1; 3end 0else if txtline [i] in ['0'..'9'] then begin 3end 0else begin 3oth_ct := oth_ct + 1; 3end; 0{endif} ,end; {for i} ,if ((oth_ct = 0) and (dot_ct < 2)) then NUMERIC := true; integer; )dot_ct: integer; )oth_ct: integer; begin )NUMERIC := false; )j := length (txtline); )if j > 0 then begin ,dot_ct := 0; ,oth_ct := 0; ,for i := 1 to j do begin 0if ((i = 1) and (txtline [i] in ['=','-'])) then begin tr) do if ord(str[i]) in [97..122] then str[i]:= chr(ord(str[i]) - 32); {endif} {end for i} end; {UPPERSTR} function NUMERIC (var txtline: string): boolean; var i: integer; )j: f negative then wk_num := - wk_num; 4if (wk_num > -32768) and (wk_num < 32768) 7then intstr:= trunc(wk_num); end; {INTSTR} procedure UPPERSTR (var str: string); {Change string to upper case} var i: integer; begin for i := 1 to length (s8for i := 1 to length (strg) do begin  5 6then exit (intstr) 6else begin 8wk_num := 0; integer [12]; 3 *begin intstr := 0; 3i := pos (' ', strg); 3while (i > 0) do begin 5delete (strg, i, 1); 5i := pos (' ', strg); 3end; 3if length (strg) = 0 then exit (intstr); 3negative := false; 3if strg [1] = '-' then begin 6negative :=3{ after stripping leading minus. } 3{ } 3 *const digit = '1234567890'; 3 *var i: integer; 3negative: boolean; 3wk_num: integer [12]; 3wk_pwr:d 07-04-86 AMB: Strip IBM-style line feed & ctrl-z } { } { Modified 01-31-87 AMB: Handle no-CR at end of file } .tl*Bloom**DIF Maker* .bl*ASCIDIF*April 13, 1988*Page # * .cj ASCIDIF ALLAN M. BLOOM, PhD CDP Institutional Research, Virginia Tech, Blacksburg, VA 24061 2303 San Marcos Street, Blacksburg, Virginia 24060 Office: (703) 961-7921 Home: (703) 951-2025 CIS: ot know that a file is screwy if the number of lines just happens to be an even multiple of the number of lines per record. For exporting data from PFS and its ilk, you should take an extra step. If you export a PFS file in NAME:VALUE format, there will beASCII text file like PFS puts out. The program does a pre-read that counts the number of lines in the input ASCII text file. If that number cannot be evenly divided by the number of lines per record, ASCIDIF will scream bloody murder. However, ASCIDIF cann STATE: State-2 --------------- State-2 ZIP: Zip Code-2 Zip Code-2 --------------- -------------- .lj ASCIDIF will probably intercept a screwy ME: Tom Brown Street-2 Tom Brown FIRM: City-2 STREET: Street-2 State-2 Street-2 CITY: City-2 Zip Code-2 City-2 City-1 CITY: City-1 State-1 City-1 STATE: State-1 Zip Code-1 State-1 ZIP: Zip Code-1 Tom Brown Zip Code-1 NA PFS ASCII File Expected File --------------- -------------- --------------- NAME: Joe Smith Joe Smith Joe Smith FIRM: Company Three Company Three Company Three STREET: s like the middle column. The "target" system expects one line per record field (as in the third column). What happens? The target file gets "Tom Brown" as Joe Smith's Zip Code. Tom Brown's name becomes City-2. It's a mess. .cj PFS Source File s a perfectly foul software example. The below example shows what can happen. The left hand column shows the contents of two records in a PFS "source" file. STREET is missing from the first record, and FIRM is missing from the second. A PFS ASCII file looke ASCII text file must have a corresponding "null" line -- nothing, followed by a carriage return -- else there is no way to tell which line means what. Many data base and spread sheet programs can "export" an ASCI text file. Not all do so usefully. PFS iSCII text file contains a series of lines, each terminated by a carriage return. Each line contains one data value. A data record is represented by a fixed number of data values, a given number of lines in an ASCII text file. If a data value is missing, thriety of machines under a variety of operating systems. An Apple /// ASCII text file is defined by file type (shown on directory listings as ASCI or PASDATA from Pascal based programs or as TEXT from word processors like Apple Writer) and by content. An A(*+,-./0123456789:;<=`76656,1514 BitNet: IRBLOOM @ VTVM1 .lj ASCIDIF converts an Apple /// ASCII text file to a standard DIF (Data Interchange Format) file. DIF is a standard file format that can be imported by a number of data base and spread sheet programs running on a va one line per datum, even if that datum is blank. The author's public domain NVASCI program will then convert that NAME:VALUE file to a well behaved ASCII text file that ASCIDIF (and other importing programs) can handle. With that major CAVEAT out of the way, let's see what ASCIDIF does. The ASCIDIF screen looks like this: ____________________________________________________________________ | | | ASCIDIF: ASSCII text file to stmported file is in that order. 3EZ Pieces expects it that way. .cj CATALYST INSTALLATION .lj Create a ASCIDIF sub-directory and then copy the boot disk files .D1/SYSTEM.STARTUP --> .PROFILE/ASCIDIF/ASCIDIF.CODE .D1/SYSTEM.LIBRARY --pleted and invites you to press RETURN to clear the screen and exit the program. .pm0 .lm-3 ASCIDIF creates a DIF format file in "column" order. Each "vector" (in DIF notation) represents a line of cells in a spread sheet. VisiCalc must be told that the i sets (the number of lines per record) rather than input file lines. F: Any error messages appear here. If nothing major has gone wrong, this message area first asks if you would like to convert another file. If not, it tells you that the job has been comut file's, with an "ASCI" extension. If that is OK with you, press RETURN, else type in a different path name. Use the same editing commands as in A. E: This "odometer" goes rather slower than the one in Message B because it is measuring input file record again. If the source file is screwy (a la PFS) press ESCAPE when you see the "not multiple of lines per record" to leave the program. A zero or null entry will also cause the program to stop. D: The output file's path name defaults to the same as the inp lines are in the source file. C: Tell ASCIDIF how many lines in the source file represent one record. You may not enter a non-numeric. The number you enter must be evenly divisible into the number of records in the source file. If you made a mistake, trye-R-Arrow: Del right. Openapple-ESCAPE: Default reappears. Up-Arrow: File selection menu. B: After a second or so, you will see this message as ASCIDIF reads the complete source file. Sorry, but there is no alternative. The program must know how manyvert. You may edit the pathname (after the colon) as follows: ESC: No file. Pgm ends. RET: Accept bracket contents. L/R Arrows: Move cursor. Openapple-I : Toggle insert. Openapple-L-Arrow: Delete left. Openappl | F: | Program messages | |____________________________________________________________________| .pm-3 .lm+3 A: Type the path name of the ASCII text file you wish to con file record sets read = xxxxx | | | |____________________________________________________________________| | | D: | Blank-RETURN exits program. | | Output DIF file (Default: infilepath.ASCI) --> | | | E: | ASCII | C: | Zero or RETURN exits program. | | Number of text file lines per record --> { } | | | | Enter input ASCII text file --> | | | B: | ASCII text file records read = xxxxx | | andard DIF format AMB v.04/88 | |____________________________________________________________________| | | A: | Press RETURN to exit program. > .PROFILE/ASCIDIF/ASCIDIF.LIB To install the system under "Catalyst," follow the instructions in the section titled "Installing Simple Pascal Programs." Briefly, 1. Select "Catalyst Edit" from the main menu. 2. Enter "1" to "Edit Catalyst Menu." 3. Arrow to highlight the menu entry you want the program to precede. 4. Press "A" to add a program entry. 5. Respond to the "Catalyst" queries as follows: _____________________________________________________________________ | >@ABCDEFGHIJKLMNOPQRSabcksburg, Virginia 24060 Office: (703) 961-7921 Home: (703) 951-2025 CIS: 76656,1514 BitNet: IRBLOOM @ VTVM1 ASCIDIF converts an Apple /// ASCII text file to a standard DIF (Data Interchange Format) file. DIF is a st ASCIDIF ALLAN M. BLOOM, PhD CDP Institutional Research, Virginia Tech, Blacksburg, VA 24061 2303 San Marcos Street, Blac RETURN | |_____________________________________________________________________| 7. If all entries are correct, press "openapple-A" to accept the entries. Escape however many times are needed to get to the editor menu. 8. Select "Save the menu fil..: .PROFILE/LANGUAGES/PASCAL/RTINTERP | | DATA prefix..............................................: .PROFILE | | CHARACTER SET file...................................: Press RETURN | | KEYBOARD LAYOUT file.................................: Press _____________________________________________________________________ | | | PROGRAM file.............: .PROFILE/PROGRAMS/ASCIDIF/SYSTEM.STARTUP | | LANGUAGE file................t the folder you want ASCIDIF to be in. The arrow to the menu entry you want the program to precede. 4. Press "Control-I" to insert a program entry. 5. Type "ASCII to DIF Converter" on the inserted line. 6. Respond to the Selector queries as follows: M.MISCINFO To install the system under "Selector," follow the instructions in the section titled "Installing A Pascal Program." Briefly, 1. Select "Menu Editor" from the main menu. 2. Select "Edit the menu file" from the editor menu. 3. Arrow to highlighCIDIF sub-directory and then copy the boot disk files .D1/SYSTEM.STARTUP --> .PROFILE/PROGRAMS/ASCIDIF/SYSTEM.STARTUP .D1/SYSTEM.LIBRARY --> .PROFILE/PROGRAMS/ASCIDIF/SYSTEM.STAR.LIB .D1/SYSTEM.MISCINFO --> .PROFILE/PROGRAMS/ASCIDIF/SYSTEtwice to return to the edit menu. 7. Enter option "5" to update the INTERPS file. You do not need to re- calculate the minimum load address. 8. Exit to the Catalyst main menu via entering option "7" .cj SELECTOR INSTALLATION .lj Create a PROGRAMS/AS________________|_____| NOTE (A): If Pascal 1.2 is installed via "Super PMove", the interpreter pathname is "SOS.INTERP". Verify via other Pascal program menu entries. 6. If all entries are correct, enter "Y" to the final question. Press ESCAPE Press RETURN | | | Max Files Allowed Open: 3 | | | Program Path: .PROFILE/ASCIDIF/ASCIDIF.CODE | | |_______________________________________________RN | | | Character Set Pathname: Press RETURN | | | Screen: Press RETURN | | | Keyboard: Press RETURN | | | Prefix: | | | Display Name: ASCII to DIF | | | Interpreter Pathname: CATALYST/PASCAL | (A) | | Extra Drivers: Press RETUandard file format that can be imported by a number of data base and spread sheet programs running on a variety of machines under a variety of operating systems. An Apple /// ASCII text file is defined by file type (shown on directory listings as ASCI or _______ | | | ASCIDIF: ASSCII text file to standard DIF format AMB v.04/88 | |____________________________________________________________________| | well behaved ASCII text file that ASCIDIF (and other importing programs) can handle. With that major CAVEAT out of the way, let's see what ASCIDIF does. The ASCIDIF screen looks like this: _____________________________________________________________ Page 1 Bloom DIF Maker there will be one line per datum, even if that datum is blank. The author's public domain NVASCI program will then convert that NAME:VALUE file to a happens to be an even multiple of the number of lines per record. For exporting data from PFS and its ilk, you should take an extra step. If you export a PFS file in NAME:VALUE format, ASCIDIF April 13, 1988 a pre-read that counts the # of lines in the input ASCII text file. If that number cannot be evenly divided by the number of lines per record, ASCIDIF will scream bloody murder. However, ASCIDIF can't know that a file is screwy if the number of lines just tate-2 ZIP: Zip Code-2 Zip Code-2 --------------- -------------- ASCIDIF will probably intercept a screwy ASCII text file like PFS puts out. The program does City-2 STREET: Street-2 State-2 Street-2 CITY: City-2 Zip Code-2 City-2 STATE: State-2 --------------- S STATE: State-1 Zip Code-1 State-1 ZIP: Zip Code-1 Tom Brown Zip Code-1 NAME: Tom Brown Street-2 Tom Brown FIRM: Joe Smith Joe Smith FIRM: Company Three Company Three Company Three STREET: City-1 CITY: City-1 State-1 City-1 n" as Joe Smith's Zip Code. Tom Brown's name becomes City-2. It's a mess. PFS Source File PFS ASCII File Expected File --------------- -------------- --------------- NAME: Joe Smith file. STREET is missing from the first record, and FIRM is missing from the second. A PFS ASCII file looks like the middle column. The "target" system expects one line per record field (as in the third column). What happens? The target file gets "Tom Browt. Many data base and spread sheet programs can "export" an ASCI text file. Not all do so usefully. PFS is a perfectly foul software example. The below example shows what can happen. The left hand column shows the contents of two records in a PFS "source"fixed number of data values, a given number of lines in an ASCII text file. If a data value is missing, the ASCII text file must have a corresponding "null" line -- nothing, followed by a carriage return -- else there is no way to tell which line means whaPASDATA from Pascal based programs or as TEXT from word processors like Apple Writer) and by content. An ASCII text file contains a series of lines, each terminated by a carriage return. Each line contains one data value. A data record is represented by a | A: | Press RETURN to exit program. | | Enter input ASCII text file --> | | | B: | ASCII text file records read = xxxxx | | | C: | Zero or RETURN exits program. | | Numblect "Catalyst Edit" from the main menu. 2. Enter "1" to "Edit Catalyst Menu." 3. Arrow to highlight the menu entry you want the program to precede. 4. Press "A" to add a program entry. 5. Respond to the "Catalyst" queries as follows: _________________.D1/SYSTEM.STARTUP --> .PROFILE/ASCIDIF/ASCIDIF.CODE .D1/SYSTEM.LIBRARY --> .PROFILE/ASCIDIF/ASCIDIF.LIB To install the system under "Catalyst," follow the instructions in the section titled "Installing Simple Pascal Programs." Briefly, 1. Seine of cells in a spread sheet. VisiCalc must be told that the imported file is in that order. 3EZ Pieces expects it that way. CATALYST INSTALLATION Create a ASCIDIF sub-directory and then copy the boot disk files convert another file. If not, it tells you that the job has been completed and invites you to press RETURN to clear the screen and exit the program. ASCIDIF creates a DIF format file in "column" order. Each "vector" (in DIF notation) represents a le one in Message B because it is measuring input file record sets (the number of lines per record) rather than input file lines. F: Any error messages appear here. If nothing major has gone wrong, this message area first asks if you would like toame editing commands as in A. ASCIDIF April 13, 1988 Page 2 Bloom DIF Maker E: This "odometer" goes rather slower than thogram. A '0' or null entry will also cause the program to stop. D: The output file's path name defaults to the same as the input file's, with an "ASCI" extension. If that is OK with you, press RETURN, else type in a different path name. Use the sThe number you enter must be evenly divisible into the number of records in the source file. If you made a mistake, try again. If the source file is screwy (a la PFS) press ESCAPE when you see the "not multiple of lines per record" to leave the pr as ASCIDIF reads the complete source file. Sorry, but there is no alternative. The program must know how many lines are in the source file. C: Tell ASCIDIF how many lines in the source file represent one record. You may not enter a non-numeric. ws: Move cursor. Openapple-I : Toggle insert. Openapple-L-Arrow: Delete left. Openapple-R-Arrow: Del right. Openapple-ESCAPE: Default reappears. Up-Arrow: File selection menu. B: After a second or so, you will see this message_____________________________________________| A: Type the path name of the ASCII text file you wish to convert.You may edit the pathname (after the colon) as follows: ESC: No file. Pgm ends. RET: Accept bracket contents. L/R Arro | |____________________________________________________________________| | | F: | Program messages | |_______________________h.ASCI) --> | | | E: | ASCII file record sets read = xxxxx | | er of text file lines per record --> { } | | | D: | Blank-RETURN exits program. | | Output DIF file (Default: infilepat____________________________________________________ | | | | Display Name: ASCII to DIF | | | Interpreter Pathname: CATALYST/PASCAL | (A) | | Extra Drivers: Press RETURN | | | Character Set Pathname: Press RETURN | | | Screen: Press RETURN | | | Keyrec [length (rec) + 1], j); 0rec [0] := chr (length (rec) + j); 0{$rangecheck+} 0ptr := ptr + j; 0if ptr <= len then line_end := true; 0ptr := ptr + 1; -until ((line_end) or (ptr > len)); until (line_end); *if length (rec) > 0 then begin f} end; {check for actual read} {endif} -if ptr > 0 then repeat 0j := scan (len + 1 - ptr, =chr(13), buf [ptr]); 0if (j + length (rec)) > 255 3then j := 255 - length (rec); 0{endif} 0{$rangecheck-} 0moveleft (buf [ptr], 6k := scan (len, =chr(00), buf [1]); 6if k > 1 then if buf[k-1] <> chr(13) then begin 9buf[k] := chr (13); 9if k < len then k := k + 1; 9end; 6{endif} 6len := k; 6end; 3{endif} 3ptr := 1; end; {block read} {endi9ok := true; 9end 6else if buf [j] = chr (00) then begin 9ok := true 9end 6else if buf [j] = chr (26) then begin 9buf [j] := chr (00); 9ok := true; 9end; 6{endif} 3until (ok); if eof (fl) then begin i = 0 then begin ef := true; 3line_end := true; ptr := 0; end else begin len := i * 512; 3ok := false; 3j := 0; 3repeat 6j := j + 1; 6if j > len then begin ng [1]; *ok: boolean; begin rec_lf := ' '; *rec_lf [1] := chr (10); *line_end := false; *with F do begin *rec := ''; *repeat if ((ptr < 1) or (ptr > len)) then begin i := blockread (fl, buf, 2); 0if{ } procedure READ_ASC (var fl: filetp; var f: fileblock); var i,j,k: integer; line_end: boolean; rec_pos: 0..255; *rec_lf: striitor menu. 3. Arrow to highlight the folder you want ASCIDIF to be in. The arrow to the menu entry you want the program to precede. 4. Press "Control-I" to insert a program entry. 5. Type "ASCII to DIF Converter" on the inserted line. 6. Respond to the .PROFILE/PROGRAMS/ASCIDIF/SYSTEM.MISCINFO To install the system under "Selector," follow the instructions in the section titled "Installing A Pascal Program." Briefly, 1. Select "Menu Editor" from the main menu. 2. Select "Edit the menu file" from the edTALLATION Create a PROGRAMS/ASCIDIF sub-directory and then copy the boot disk files .D1/SYSTEM.STARTUP --> .PROFILE/PROGRAMS/ASCIDIF/SYSTEM.STARTUP .D1/SYSTEM.LIBRARY --> .PROFILE/PROGRAMS/ASCIDIF/SYSTEM.STAR.LIB .D1/SYSTEM.MISCINFO --> in menu via entering option "7" ASCIDIF April 13, 1988 Page 3 Bloom DIF Maker SELECTOR INSies. 6. If all entries are correct, enter "Y" to the final question. Press ESCAPE twice to return to the edit menu. 7. Enter option "5" to update the INTERPS file. You do not need to re- calculate the minimum load address. 8. Exit to the Catalyst maOFILE/ASCIDIF/ASCIDIF.CODE | | |_______________________________________________________________|_____| NOTE (A): If Pascal 1.2 is installed via "Super PMove", the interpreter pathname is "SOS.INTERP". Verify via other Pascal program menu entrboard: Press RETURN | | | Prefix: Press RETURN | | | Max Files Allowed Open: 3 | | | Program Path: .PR-i := pos (rec_lf, rec); -if i > 0 then delete (rec, i, 1); -end; *{endif} *end; {with F} end; {READ_ASC} procedure dif_header; begin *writeln (outfile, 'TABLE'); *writeln (outfile, '0,1'); *writeln (outfile, '""'); *writeln (outfile, 'VECTORS'); *writeln (outfile, '0,', vectors); *writeln (outfile, '""'); *writeln (outfile, 'TUPLES'); *writeln (outfile, '0,', tuples); *writeln (outfile, '""'); *writeln (outfile, 'DATA'); *writeln (outfile, '0,1'); *writeln (993'); #repeat &init; &dif_header; &gotoxy (1 - x_offset, 15 - y_offset); &clreol; &in_count := 0; &write ('ASCII file record sets read = ', in_count:5); &for i := 1 to tuples do begin )in_count := in_count + 1; )gotoxy (31 - x_offset, 15 - y_of*ok := sos_get_info (outpath, filelist, 15, retcode); *writeln (outfile, ' '); *close (outfile, lock); *filelist.file_id := 4; *ok := sos_set_info (outpath, filelist, 15, retcode); *reset (outfile, outpath); end; {init} begin #notice ('ASCIDIF', '1*gotoxy (1 - x_offset, 13 - y_offset); *xopen (outfile, 'Output DIF file', 'rewrite', outpath); *if outpath <= ' ' then begin -wk_char := err_23 ('No output file.'); -close (infile); -clrscr; -ok := sos_terminate; -exit (program); -end; *{endif} tr2 = 'ASCI' -then wk_str1 := concat (wk_str1, '.X.ASCI') -else wk_str1 := concat (wk_str1, '.ASCI'); *{endif} *outpath := concat (wk_str3, wk_str1); *gotoxy (1 - x_offset, 12 - y_offset); *clreol; *write ('Blank-RETURN exits program'); at (wk_str3, copy (wk_str2, 1, i)); -delete (wk_str2, 1, i); -i := pos ('/', wk_str2); *end; *wk_str1 := wk_str2; *i := pos ('.', wk_str2); *if i > 0 then begin -wk_str1 := copy (wk_str2, 1, i-1); -delete (wk_str2, 1, i); -end; *{endif} *if wk_sd; -{endif} *until (ok); *tuples := tuples div vectors; *reset (infile, inpath); *inblock.ptr := 0; *inblock.ef := false; *wk_str := inpath; *wk_str2 := wk_str; *wk_str3 := ''; *i := pos ('/', wk_str2); *while (i > 0) do begin -wk_str3 := conc-until (vectors > 0); -if tuples mod vectors <> 0 then begin 0wk_char := err_23 3('ASCII text file recs not a multiple of lines per rec'); 0if wk_char = chr(27) then begin 3ok := sos_terminate; 3exit (program); 3end; 0{endif} 0ok := false; 0eno lines per record.'); 3clrscr; 3ok := sos_terminate; 3exit (program); 3end; 0{endif} 0vectors := intstr (wk_str2); 0if vectors = 0 then begin 3wk_str := concat ('"', wk_str2, '" is invalid.'); 3wk_char := err_23 (wk_str); 3end; 0{endif} l; 0write ('Zero or RETURN exits program.'); 0gotoxy (1 - x_offset, 10 - y_offset); 0clreol; 0write ('Number of text file lines per record --> '); 0readln (wk_str2); 0if ((wk_str2 = '0') or (length (wk_str2) = 0)) then begin 3wk_char := err_23 ('Ne begin 0tuples := tuples + 1; 0gotoxy (32 - x_offset, 7 - y_offset); 0clreol; 0write (tuples:5); 0end; -{endif} *until (inblock.ef); *close (infile); *repeat -ok := true; -vectors := 0; -repeat 0gotoxy (1 - x_offset, 9 - y_offset); 0clreo-end; *{endif} *inblock.ptr := 0; *inblock.ef := false; *tuples := 0; *gotoxy (1 - x_offset, 7 - y_offset); *clreol; *write ('ASCII text file records read = ', tuples:5); *repeat -readasc(infile, inblock); -if inblock.ef then begin 0end -elsxit program'); *gotoxy (1 - x_offset, 5 - y_offset); *inpath := ''; *xopen (infile,'input ASCII text file', 'reset', inpath); *if inpath <= ' ' then begin -wk_char := err_23 ('No input file.'); -clrscr; -ok := sos_terminate; -exit (program); write ('AMB v.04/88'); *gotoxy (1 - x_offset, 2 - y_offset); *for i := 1 to 79 do write ('_'); *gotoxy (1 - x_offset, 23 - y_offset); *for i := 1 to 79 do write ('='); *gotoxy (1 - x_offset, 4 - y_offset); *clreol; *write ('Press RETURN to eoutfile, '""'); end;{dif_header} procedure init; begin *scrn_parm; clrscr; gotoxy (1 - x_offset, 1 - y_offset); write ('ASCIDIF: ASCII text file to Standard DIF Format'); gotoxy (69 - x_offset, 1 - y_offset); fset); )clreol; )write (in_count:5); )writeln (outfile, '-1,0'); )writeln (outfile, 'BOT'); )for j := 1 to vectors do begin ,readasc (infile, inblock); wk_str1 := inblock.rec; ,if numeric (wk_str1) then begin /writeln (outfile, '0,',wk_str1); e" from the editor menu. 9. Exit to the Selector main menu by choosing "Quit Editing" from the editor's main menu. .tl .ff .bl5 WAP /// SIG HELLO PROGRAM. UPDATED 4/12/89 DGO :#1,".D1/hello.text" ž#170 (#1;ERIN$ 2ERIN$<40F#1/P=23:=25:"PRESS ANY KEY TO CONTINUE.":G$U-Z#2,".D1/FLASHNAME.DAT":#2;FLASH$:#2%dFLASH=110: FLASce code. It is self-booting and uses the /// SIG's Menu.Maker program. Side two contains ASCIDIF and is also self-booting. We hope you enjoy it and encourage your submission of programs to our PD library. oting PASCAL (Side Two) This is another great disk of Pascal programs from our good friend Dr. Allan Bloom, PhD and is called ASCIDIF. It will convert a file from ASCII to DIF format simply and easily. Side one contains the documentation and sourdf0 WELCOME! WAP /// SIG Public Domain Library Disk Category/Number: Bloom Programs/3BLM-06 Disk Format: Self-booting BASIC (Side One) Self-bo /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// SIG, Washington Apple Pi 12022 Parklawn Drive Rockville, MD. 20852 (301)-984-030 Page 4 Page 4 . 8. Select "Save the menu file" from the editor menu. 9. Exit to the Selector main menu by choosing "Quit Editing" from the editor's main menu. ASCIDIF April 13, 1988 ........................: Press RETURN | |_____________________________________________________________________| 7. If all entries are correct, press "openapple-A" to accept the entries. Escape however many times are needed to get to the editor menu| LANGUAGE file..................: .PROFILE/LANGUAGES/PASCAL/RTINTERP | | DATA prefix..............................................: .PROFILE | | CHARACTER SET file...................................: Press RETURN | | KEYBOARD LAYOUT file.........Selector queries as follows: _____________________________________________________________________ | | | PROGRAM file.............: .PROFILE/PROGRAMS/ASCIDIF/SYSTEM.STARTUP | HER SUBROUTINEnSLOW=110xFLASH/2=FLASH/2):۴ =11:=07 FLASH$ SLOW FLASH:".d1/Menu.Maker"0 WAP /// SIG MENU.MAKER PROGRAM (v. 6.2) =".D1"210: Coldstart (320: Warmstart &*X=11000: TEXT SLOW-DOWN LOOP ,X.1 CHANGE DISK SUBROUTINE23œ202:2200<RFa$=" YOU MAY SELECT YOUR DISK BY M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=211660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$="JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750T 0")2070H540R\A$="RUNNING "+B$(I),16,B)f"79C";A$;:=0pB$(I),16,B) z::SEG=1".D1/SEG.T"t=+B$(I),16,B) yCT=CT+1~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,0=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1 œ2120B=B$(I),16)," ")-1 B$(I),"BASIC 0")850B$(I),"TEXT 0")890 B$(I),"CAT 0")1140*B$(I),"FONT 0")18504B$(I),"FOTO 0")1930>B$(I),"PASTXB$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:CA)"PRINT.ALL": OA+P 3HA=(81+UCA)A=(81+LCA):::: OA+Q Quits 3IA=(83+LCA)A=(83+UCA)"PRINT.SHOW": OA+S 2JA=(68+LCA)A=(68+UCA)/Screen.Savers/HELLON=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:ٺ1600 =Q:WW=0A=:A=21A=9&oldprefix$=40A=31410: Control C "aborts" program to Basic(:A=13770: Return Selects a file *DA=27:50: Escape to change disks/FA=324000: back out one directory level 3GA=(80+UCA)A=(80+L"BASIC 0":150A$="TEXT 0":150A$="CAT 0":150A$="FONT 0":150A$="FOTO 0":150A$(L),"BLOCKS")510*=27:=19:"FREE MEMORY AVAILABLE: ";=7:=20:"80C";A$(L);$:=5:THPOS=4:I=1:IBOTM=J-1:620Q=:=26:=21:sic; +Q Quits."r12);::"80C";a$;:+w#9,"DISKNAME.DAT":#9;DISKNAME$:#9|d$=DISKNAME$$=23:=0::"80C";d$;::12)201M=3:=14:"This /// SIG Disk is \^ 19";Р,2)", Washington Apple `, Ltd."=4:B$(1)="":B$(2)=""A$=16,B) THEN 240 #1, d$="":=10:"80C";d$ ž#1300I=0"I=I+1:#1;A$(I):290,#1 6L=I-1@j=1:same=0 J:SEG=0 Tœ2030^CT<1CT=1cCT>13000Zha$="{,|,~,}; selects; to new disk; J/2)=4:=+1:ۙ=44B$(J);:J=J+1I:1,180,22:2,280,21:2,2380,23:8A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0UCA=128:LCA=UCA+32CT=15 IF PREFIX$= PREFIX$+MID$(B$(I),hjklmnopVOLUME NAME (/DISKNAME) OR DEVICE NAME (.Dx)"P12);::"80C";a$;:Zb$="CHANGING DISKS"$d=23:=0::"80C";b$;::12).n=12:=20:"MAKE A NEW MENU FOR DISK: ";N$xN$)<2110=N$ :210 I=1L(A$(I),A$))200B$ 1600 &:WW=1:0 :SEG=1;".D1/S EG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU.">G$:::320H: Error Routine 202:U=11:"79C";"BAD PATH ERROR (NO DISK IN DISK DRIVE OR DESIRED FILE NOT FOUND.)"X=11000:X:::210Z a$="{,|,~,}; selects; back 1 lev HH`Ln,/023x #) "# (```'+"'*CFMRZ_ '058FV[fjsuw;Console 4nʐ3x1eʍ1,/p/H h(eʅ8ʅİLa )`Y)D00L:1?24n21  % &$0) `/0) `,.0L tHsH`! (xy```,.0L HH` (# (KXT .")"#)  #`,.$ ()-'( / .`% (.L,/0x ('( `,.0L& (,.0L7 Đ`ʥ逅8n13DL8H\0`(d  $,($  ,BSerial Printer Driver -- Copyright (C) 1983 by Apple Computer Inc..PRINTER A")Copyright (C) 1983 by Apple Computer Inc.>88  >!SHOLES 1!1!2@23#3#4$4$5%5%6^67&7&8*8*9(9(0)0)-_-=+=+\|QWERTYUI OP[{]}`~`~ASDFGHJ K L ;:;:'"'"ZXCVBNM ,<,<.>.>/?/?d0hp00000>0# #0~$ <"<"""<< <"""<"><$""< """"  "" 6***""""""""""<""< :< $"""2,"""""**6"""""< >>>>> ""*:<"">""""""""""""">>><2"<""">""" ""  ">"6**"""""&*2""""""""""""*,"" "" ">""""""""""""""**6"""""""> >>>xrrtuvwxyz{|}~GA7  3  5  >>< (&20 *, **>> "2*&" " >>  ">> "8""> """"""< SOS DRVR"CUSTOM.3 )((8*,;((*,((+)((9/(p((>3  =9 :9 .(~|L|LNqooGoDDDcc0ccpc]]c"QM"|@@pAATT**|ASCIIDIF by BLOOM el; ٮ@8pذ `$0"8,:Jک@ׅפ؈۩MjL,:08*Ȅ B ,:J}΅н(I I $0;P̑бʑΈ,:JՐrx 0, )ߍ:) J)*PR,T,V( : `,k<,: JI`I`<,:J̰`=m@>,:J}ʅ̽(I I `<Mj,:0pJՐ̑ʈ`pJհ0`ՑʭrpȐ`=m@< B h A$g " x) (,`% (gL,}0, `gé ĩ `:) j:;jN;~j;O,:0'???>>8?>p<<AAA@@8A@q==C)CB)B C}0 x) `(`hh% ( ΍ ύ逅Ñ}`` " ( ĩ~Íĩϭ & &υΠÑΈ~ F ~ҰةeÅÐн},,P,`,g$ ( efh) `xÙ+(`xÙ&(`)4`)5`)6`)7`)8`)9`,i0!M:0p ȱq L `" (~)y ~JJ* I `x|x|,,}P-X~ F }~L } `,,i0L È`,g HH`LL! l      5  Hdcefh&+si  M0   h) `(" (  (È& 8  `)2ȱÍ3`)1`Ɂ" (cefd`Hc <Le Le ,g0L HH`! ( 9EKQWbmz`(" ((è%È`2ȭ3`1`d`c`+È`&È` & IMk`4`5`6`7`8`9`<ȭ=` & @jI`:ȭpȭqéL ==L: ,lCL <=L: <,n)LL8 L8 u:L8 ;)ߍ;j`; ;j`uBL8 uCL8 u)u;) u;L8    x) `(,  LuL-upp<`uqq=L: vuL L L #1:CY` 9C<m><=m@=>@?AL8 >m<>@m=@<=L8 <m>?=m@AL8 C9L8 ; ;k`;);k`,@`<,m p<L<`<p<`,ms<L=q=L: ,lXґȥӑ,10 h0  `,g0L  ҅ӥĥŰ+,0p 4 Ls  Ls i )"|tȌs|st HH` MjH,: <J h̰ <rh,oL`%CYgu9 Ln90$0%,7 ҥ L$0T,8OK50P;ҥ,8 L%\   8҅¥Ӆé҅L,5,6  & @jIH,5 p  He҅Ґhe…å逅h,23Lhʩd8,h)ec efeede`,5 H  h 4  `5!    4(P 4 4  `,g0L,10kH0 ԥ f0)ĭ9)9҅xh(ĥŐL i,1HȊ©L,52,9-P" a{) b) )ab)a a,h0& &+%a0 +hcefd(c,@cfabdf`cnx  (,4h`dd,9P"<:J H) +̰ H) +ʭcP h̰+;CNU\eh "*-036<BLORX_fj &+38;?DGLTot <?BGLQgjox',/25:BGKORY\aelpu !$(+.147<?BFILORUX]`finsw| !%*/369<eٍeڍ808٥8٥ 8مڅ H , V Εm٭mڭ))njnjnjfjfjfj+mӥmԐ8L( Ӣ й` m j`Hآ Hӭԭ h h`8٭028ٍڍ0Z$eٍeڍm٥m8٥08ٍڍ`8٥058ٍڍ0ԭ V 8fxL@ ] I)!) g 80 J8}L y L 0yʽz0 y L7  Lh `*f*&*)` ϭPh0 йPL)`)L` L``  `L` H , 8 V ТΕLϦI ] +)J* g I`LL) @L) L8``Lթ`~L8L)  =H 'HH N M))Mhh0 }LO}~~Șݻ~`}}~L< L }ީ~` ɠɀ)ӮԮmwӥmxԐ mi` HHGH`  &xix 0ޤՐڢ,P<0 )ߍL- J,P,QJ,R,SJ,T,U,W`,t0L40 ( dȅɥŐ ĐL `ʝ`))ժuvЭ H ʊJyjhz|ֆ׆ح)JfJf$PIJfש ʈ8 @ש wx LVخ ʊJJJ莟mww HH`! (`ɖ" (èÈ``,t0L4 HH`L  d!  `ɖ" ( dÈ  ``,t0L4 d0Cս30. , V  @„ȄL5/((((PPPP @``` @@@@`xp<@ @ :H9H` (# ( -l..PcJt`,t$ ( t`tL4`,t0L4www """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwww(C) 1980 Apple Computer (+@EIR[ty} NQ9Copyright (C) 1983 Apple Computer, Inc. Graphics Driver..GRAFIX b """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwww     ! ( 0 7 I N S _  . G R Y f {    ! $ 4 9 F I P S V \ a h m p s x |     ' + < ? D G N U f k p x ?BEJMRUX]`h  2;AGMS[fot|              . 3 6 9 < ? B E H N S V \ _ b w  ,$0F y բӅLx  mӥmԐL] h `  )`%)8`)    H   ʥ)Ģ    H Ģ L E% %) L 8`ۅ&ۥeepɀjff&ݥeepɀjffݠ %)  %)`%  0.)      0  ` ` @ ``8٨JJJ ) u˘ vͽʅ̆`8Hi #i30C$="N"C$="n"1160;:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": $1020.202 8::Z=1B::=23:=0::"79C";"WOULD YOU LIKE A PRINTED COPY?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"1170*C$="N"C$="n"79C";"PRESS ANY KEY TO HALT LISTING"::202 1020#2,B$(I),16,B)ž#242:::1160Z=1#2;A$:"78A";A$Z=Z+1:Z>1842:::Z=1980*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"10 MENU.MAKER TEXT MODULESEG=0"MENU.MAKER"890&*X=11000: TEXT SLOW-DOWN LOOP ,X.1,180,22:2,280,21:2,2380,23:z:A$="LISTING "+B$(I),16,B)$=01:=0::"80C";A$;::12)>=23:=0::"    ) . 6 = J P S X [    $ 3 : = F d  > B H M s `e|&+.QVYcjuy~':{%(-47=FMUX\_jmz  .169DWfy   % * > A H K Z v z }      % , 1 5 : = B K R Z _ b g n s x ~ /47=G\x{~'+.149?CGIKMOQSUWY[]_acegikmoqsuwy{}J) ܭL FܪJJJJ)`'+9;=?ACEGINR\aejns~  #&).369<ADGJMP^g $*-06=HLORWcfloruzp Q%Q̑`pPIE1pΦ#$01ʐ1`JJJJ)`%υߥ`1(ȦJJJ`&&*`JJ` **&*&ߥ`J` ***`` ` Jjjߊ` ߊ`JfJfFߪ߆` `JfJfJfF`ߩ`$011̰JJJ LP \LD$7߭$PH8 nߩ nh ߍϭ - k, ϥ- kϱϮEϑʩ`P z  HH` k(h`$0#$E$0p Q%Qʑ`pPIE1p$E$0(L%τ`ϩE҅0Ȅ(fL% ('Άѽн`8Hٰ hIiHمh8Iif٤Φݰ>Jj8ۅe݅eޅ $  m`!J8݅ eۅ$  m` , V $צ!ϤҐ мφi`Jf`<,&ʰ,i8i#Hiihifʦʆi) v`i,ʐi,iPIIʥ)ifʦʆ̐pLj/Fϐ&Ȅ`'@τ`Fϐ@ E҅F8ئȢΆѽϽ`/".D1/MENU.MAKER",220 d$="" A$="PRINTING "+B$(I),16,B)=01:=0::"80C";A$;:#3,B$(I),16,B)Z=1#3;b$:"78A";b$Z=Z+1:Z=18:1290 1260 #4,B$(I),16,B)#5,".PRINTER"+ž#4#5;12):::".D1/MENU.MAKER",220(204::"79A";""; 2D=1:F=1 <#4;a$ FD=D+1 P#5;a$ZD=60#5;12)dD=60D=1nF=F+1::d$;::Y=1100:Y x13402  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T R WAP /// SIG PUBLIC DOMAIN LIBRARY 12022 Parklawn Drive Rockville, MD. 20852 (301)-984-0300 PDS NAME: ASCIDIF by Bloom DISK ID#: 3BLM-06 BOOTABLE?: Boo2010C$="N"C$="n"200;:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": 20002,280,21 DF$(I)=D$+"/DISKNAME.DAT"F$(I)=D$+"/FLASHNAME.DAT"410:ۺ310 PRINTER v 1.0 p$ 900A$="PRINTING"+F$(I):$=01:=0::"80C";A$;::12)F=23:=0::"79C";"PRESS ANY KEY TO HALT PRINTING"::2,280,21 2000*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"#1,D$::"Processing directory ";34);D$;34);", please wait."; ž#1880*#1;A$:A$)<48104A$,3,4)<>"TEXT"810>X=X+1:".";HE=15:F$=A$,16,15)RF$,E,1)=" "E=E-1:850\F$(X)=D$+"/"+F$,E)f810p:  Pausež#1740#1;A$:A$)<4710A$,3,4)="TEXT"X=X+1710 :X>YN=P::7);"There are no text files in the ";34);D$;34);" directory." ::I=P::7);"Unable to locate and open ";34);D$;34);" directory." ::IT$=N$,E,1):T$=" "T$=","610XE=E+1:E>N$)610:590bD$=N$,S,E-S)l:v:E>S+1600:D$="": œ770P=3:"Looking for ";34);D$;34);" directory." #1,D$=P3:"Reading from ";34);D$;34);" directory." I>X200300S=1:D=1:B=1570D$=""500 Y=X:S=ED$(D)=D$:640 X=Y440D=D+1:S=E:440D=D-1:X=0F$(X):X=0 J=1D D$=D$(J)790&J0 :œ6303DE=S+1:N$,S,1)=" "N$,S,1)=","S=S+1:580%Nž#2390 ^1000c: h#2;a$ma$rY=1150:Y0wB=B+1: Count the number of lines printed xB=15B=30355yB=60#3;12)zB=60B=1 {#3;a$|360B<=20#3;13)::410#3;12):Z=11000:ZI I=3d: PRINTER V. 1.0 ::=2::"PRINT.ALL v. 1.0":3=4:"Directory Name(s) or return to quit: ";n$N$)=0::"MENU.MAKER"430 X>0260I=11000:I:200: ,I=1X 14000 6#2,F$(I)@#3,".PRINTER" Ja$,1)="/"5060:s=s-1 5030=a$240 MENU.MAKER 6.2 * Thanks to C.M.Davidson for his help!EAD PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU."!>G$:::".D1/MENU.MAKER",320table ASCIDIF converts an Apple /// ASCII text file to a standard DIF (Data Interchange Format) file. DIF is a standard file format that can be imported by a number of data base and spread sheet programs running on a variety of machines under a variety ofREARRANGEv' '/REARRANGE.BASIC ; -REARRANGE.DOC<7 .REARRANGE.TEXT8 s CAN be treated mathematically with no further modification. John Lomartire ersion of ASCIDIF, version 05.93, Dr. Al Bloom has modified the original program so that character strings are placed in the DIF file as LABELS and number strings are placed in the DIF file as VALUES. When this DIF file is used to load VISICALC, the valueas LABELS. Labels in Visicalc cannot be treated mathematically, e.g. added, subtracted, etc., so in those cases where ASCII files contained numbers to be processed on the spreadsheet, this first version of ASCIDIF left much work to be done. In this new v NOTE ABOUT V. 05.93 JULY, 1993 The original version of ASCIDIF created DIF files from ASCII files but it did not differentiate between character strings and numbers. Both types were entered into the DIF format as strings and transferred into VISICALC e, lock); &wk_char := yn_23 ('Convert another file?', 'N'); #until wk_char = 'N'; #wk_char := err23 ('End of job'); #clrscr; #ok := sos_terminate; end.{ASCIDIF} /writeln (outfile, 'V'); /end ,else begin , writeln (outfile, '1,0'); , writeln (outfile, '"', wk_str1, '"'); /end; ,{endif} )end; {for j} &end; {for i} &writeln (outfile, '-1,0'); &writeln (outfile, 'EOD'); &close (infile); &close (outfil operating systems. By Dr. Al Bloom. Side One: ASCIDIF.AW3 :Manual formatted for use with AppleWriter ///. ASCIDIF.DOC :Manual pre-formatted. ASCIDIF.TEXT :Source code for ASCIDIF. Side Two: ASCIDIF Program files. Self-booting Pascal. dOx=10:"Enter FULL pathname of file to be read, e.g. '.Dx/': ";F$:G$=F$+".XX": New filename same as orig with .XX added=A$(2000),B$(100): More than enough space for most files #1,F$ #2,G$ =255$œ340:SOS NTRPRHeLZĠР쁭堠堠ՠP򠭠έ魭THE WAP OFFICE LIBRARY HAS A NUMBER OF APPLE /// BOOKS AND MAGAZINES. torical data can be downloaded at fairly reasonable cost. Most of these will allow their data to be transmitted to a requester as an ASCII file in a prescribed format, e.g. comma-delimited. Compuserve might be asked for a list of quotes, say 10 day's worhe problem of generating the desired data set. Looking up each value in old editions of newspapers, or other stock market compilations, is a laborious and time-consuming task. Fortunately, there are several data providers, e.g. Compuserve, from which his it might take a few more steps, but the flexibility is there.) Anyone with an interest in technical analysis of stock market data eventually comes to the point where a mathematical examination of a large batch of historical data is desired. First comes tUSING THE APPLE /// TRANSFERRING STOCK DATA DOWNLOADS INTO VISICALC by John Lomartire (It continues to amaze me that with a bit of ingenuity the Apple /// can be made to do many things that were not originally conceived. Admittedly it is slower, and B$=B$+P$: Builds B$ until comma is found C=C+1Q#2;B$: Builds new file0C=C+1:B$=""*DC<=ZQ: Continue until end of lineXB$ lC=1:B$="".R: Continue until last A$(L) is parsed  Read until end of file6L=12000: Reads each line into A$(L) variable ,#1;A$(L)@LT hC=1:B$=""|R=1(L-1)Z=A$(R))2Q=1Z: Parses each line into individual B$P$=A$(R),C,1)'P$=","540: Comma found, print B$.ઠŭ᭭򭭪𭭠򠭠頭퀠Šӳ頠𠠀𠠠堠젭ӠΠ󭧩$ 0~!L`!sm?iٰcL`S )!a{)Qi ڐ߽S) -ai) -aɢ ɣɍж$HS -ahʥ0SSȩ5%"/װ&hԐɈf0ɔĐ 8,f 8f L_ʅSS=ȄL`ȱi8eiidHddhd) _ ƢLh _L>h jhP _S @a-Qggeg5hih 6i6 "]S" ]$%SSSg a aL^ S S`La8 SiUjjS):,$f 0$ p fHhH_HcH uhch_hhhfhi0hhhB B A` ֥'( )&񦕤LNKM$Lb ě $m wl "m6X6+5 56ɀ56H $mhɀ(Z)& mL k~ wlL ͝dL Nsd# wl^_ ꂅ__hg^`8 悕`gHhHhH5?6@6@*5g5666gҦhhhhhhhhg:e:;e; ;m;`@c@c?be^@e@ _m__^ \Lx] i6g55``BY BSAMHH H] LPL(\)&P ěj9ȑ9ȑ99i=:i: >i>`Ɂ7XWWXjnXWi` ]?@@bgchch )^ ]b ]b^b^L\b8g+H__^8_ABB 9::)ѭ [ I[ aυ婶ZeLLL^$%Lae LGidFddddddd.ddddddddd ɕdˏd`Ls  Apple Business BASIC v1.23 - Copyright Apple Computer, 1980-83 CTERESOURCE UNAVAILABLDIRECTORY FULDUPLICATE VOLUM ERROR Please Press SPACE BAR IN PROGRAM INTERRUPTED%&'(%+.@C$DE FG!H"I'MN#PQRTW(X潭`: 808`:dd@՚H Z#IJJCSTRING TOO LONFORMULA TOO COMPLECAN'T CONTINUUNDEF'D FUNCTIOVARIABLSOS CALFILES BUSNOT SOI/FILE TOO LARGWRITE PROTECDISK SWITCHEBAD PATFILE NOT FOUNPATH NOT FOUNVOLUME NOT FOUNDUPLICATE FILDISK FULFILE LOCKEFILE NOT OPEDEVICE DISCONNECONV&CONV$CONV%LEFT$RIGHT$MID$INSTR>=<^/*-+NEXT WITHOUT FOSYNTARETURN WITHOUT GOSUOUT OF DATILLEGAL QUANTITOVERFLOOUT OF MEMORUNDEF'D STATEMENBAD SUBSCRIPRANGINVOKSTACK OVERFLOREDIM'D ARRADIVISION BY ZERILLEGAL DIRECTYPE MISMATNDEELSCONLISCLEAGENETABTSPCUSINTHEAMOSTEANOEXTENSIODIAFNOAAAAAAAAAAAAAASGNINTABSATYPRECAAAAAAAAAAPDLBUTTONSQRRNDLOGEXPCOSSINTANATNAAAAAAAAAAAASTR$HEX$CHR$LENVALASCTENAACONVOERRLIERKBEOTIMEDATEPREFIXEXFNEXFN%OUTREINDENAAAAAAAPOHOMA SUB$OFTRACNOTRACNORMAINVERSSCALERESUMALEGOTIRESTORSWAGOSURETURRESTOOALOASAVDELETRURENAMLOCUNLOCCREATEXECHAIAAACATALOAADATIMAGCADEAPRIssssssssss\3!z~IssssssssssssIG%ӓ,ssևwn7}|tttUUZ{fzxxˆU膅[L<^ENFONEXINPUOUTPUDIREAWRITOPECLOSATEXABYAAAAAWINDOINVOKPERFORAAFRHPOVP̠Ώ h:gpOn[n٧s]ds3issssssss0b>&dsjs|T}|s[ji!S)Lt`SSS`L` z :0.`9::hhgg.%g& $gegަhH逪hhʰ` ҥ [ aLT ҥIJJABB=>>;<<?@@T ě hhhHH  `89:: 悅 lc!)` +b` +b` sL :b#`L,H s h ऊL(,L8f` A KL jLdjOPPKLL h AKL` Ѽ   (`H shLs AL<^ȱQȱȅR dj sLHoUVV$ LhU Lp$ LL<^opL^```?EXTRA IGNORED?REENTER $0pL,`LgXW ׫ k*iXX 4X \\L<^Xii7 { n k$ |WlXVVE$ P% eT{||Hd ̐h p IkLo00$0 L>o "m nV dj$D$ P 膼Lo$0",i [ kLoHSHhp< {}$ p0H 07h ]k ,LmUVV `p F sLn 2 ukLoF вLm jȪЖ LL<^~p l nhhLgOPP` Add# 6d s S SS@Ln A " r ,; s lLn#f  ;П ⭩,SLn "mʆ,S _S% nLh "mL_T ST#L(, U VV ׫$ 0  QpU= d hkddhe##5ddˏdd?Ll ,?#$04dHHd = d hkddˡddhhd`LsL#&F  ; s b 0` L+l$ Nsd#Lzm566ȱ5Ll H# wl m#͉LchL$m QRKLLsh$0LU$^`=8WW>X> 悅XXXL:^ g`L<^ l Jj bx bp,_;Ll  ~q$0P oՅ5R66R l ~ L%l $m0 =k $m#`$L#i)8#Ll  s s( L7bʊ# L-l m hxd5d$0H h`L^bLb$%/%5$ &5 &5e$$5e%%$&%$e$% Lk ׫ sHH ~qLPkHHh$0'ph | ZlWȥmW`L$|hXWXL-hm lmmLkl VYZZ{|| w ᐥlmmYZZ LxWXX ox ExYW# kXX 4=^W^0A, 9:: Ga.ghh 悅` A` \\ɾ,L<^hhZkKhLhhhe9e:: mLg jei `Ls j:,"hhhhLgɜEɝDɞLb Hɾɺдmhɾ Qp aj pi `p j` jLi j,d wlOZL^L^-L(dPL<^OPMNKLhhLg` Ls ҥ?ieCiLa,  aFL s a iLg ]hhh5h689H: H:HLHKHH6H5HHH` ui` pi` Qp j pi `p i` j jK$L%8eȢЅ iLOPP$pX0S&ȱhȱKȱLe潥ɂ逅$L# $mKL x~ m khLgLsLc h5逢)&a TH THLgL6k8:9: STT`)ɀLK$Lb8gLOPPKLMNhhm Vf0 mLf) mWA 0 -a mL8fW;8<< 悕` 6kLU*i kXX 4XLy \\'_ch_chbi^g \ihh ] Qp aj ih `p b iq bqn %jjg56Ly { b bq | XHWHHHֺh$PLh wlȱȱ%$LWH mh x~  m#W", mȱ28eLeji`Lwl mȱ"Ɂɂ ȱ :, iTjj ȱiVjj8逪XW0 Vf0WHW$ 0X: h ,@dd )e dʙdH &eh(dL ddک,ddLd:e``eLeHELLO ue 5eLse6e:7ee8ee:e`EAd j @a(% -, bLs j {ghhL<^gHhHhH , - b j$% @ag5h6h6hhhhh8g5h6h 悅`6 "]La ud `L  d.CONSOLE[[ TdSdddddd0 ddddd`dd A 6 s e 9c()' 9cKHLI jLdj89弅:彬: 悅`H hɝɞɜ)`dd  6芅 e ()'` e'()HKIL 9cL>hL<^) i!Ls j @aLK$L% mXm tL qXXW zzEn{i x }H$ ]kh8 )KLe9e:: }Lgi , p s$8$0p`PL<^Յ H s r ɀ ȱX Hih0 & ?<I?iE W Lq s )?TUJ)TU  ' Lsi imLqLsh E0`H ty ))ELyq  8 $0!PizEn{dUeUi hLqLs `wLr !L2 {}$ 0`QɀX zLs.+"2ZuL.y +|z% T}uH }h{ ~|H !z az ~hJ inIn`L~8;)q4X>Vt~w/z*|cYX ~uƀ1rP aziP | |iɈ { T}i8Huiiu x BU 瀩{h z` |] az 뀩]Laz | i8fe.șR0șRmymlylkykjyj00ڊIi i/ȄȪ)Re.șRI)ЪR0.ȩ+f.8f-RER/8 i:RRRRRR`y`'d |Ģ { &{f o0`LB ` H$ge &{h 80 '~L}H |h |zEn{iLxf d$h0Ly ef q80fL}COt#t$JZ mLKjk8 | ~Lm ^|-$nșRnȩ0iL f~ azea~ } \~ } &{e B{e yx %}ei0nihoi8傐IL|`7 z!L|iD8$n yiLyn)FjjjLyiɠ %}nnI*imLyjklm` s e-o+ smo..IE)2s S -+fh r$h8fL}fg s$gPf8ef B{f65m5l5k5n j5i`d,]WXX566 |m5 ^|l5k5n %j5i5` |m l)m |m`znth` |ht`i  y my`i n*` |jkjI*mlinLyFn`nEz0ʢiH xv5ui`uei0,iiL0y{n`nI0hhL,yLy |i{ xi` |={{ {LZ{ zL{ |8ii zivjwk xlym* 蕁24(y&x&w&v0⨥ymyxlxwkwvjvL{@jjj)(L{L<^~jklmL y56y^Vy dv88; 54541r |LiHi z xz U{y xy рz xh '~z zLz z~ zm zl zk zj zL{LyJ eyexew~ev~f~ffffJ`5665y5x5w5zEn{z lkj |yjJkjlkmlmi in`emeymlexlkewkjevjLkyi&m&l&k&j8iIiii9fjfkflfmf`nIngjIjgIm lkj`L<^}i0vvvvvj`L656 wh H5Gh`lmm566 Lx5Hȱ5ȱ5 F665 w56h(` x("LH)&h`( '&'`lmm566LxĠLx znInEz{iLx y? zL||uu`8i$iznIii0ĨV y${Wiuu8Iem_B_B`)&N> ȱI8gJJ hhge ghh f feLH>H= x\L|F )XHABB8 __^hHI8e^ @1 @+?%GHHHIJJih BABGHh`$  ě u Дs IJJ^__Lveȱeȱe `LćHƽ Ƽh`$ lȱlLL{ɝɍLɎСL s HI s shmHmHlHHɦ# shmHmHlHH , hHLt  ,, shTTLui ui,L3$0 |Lu xijk6kxyy xxy6i L[ s r$PLsi,L3-hLs L*tɘcɭ_ TTLdd`jk8L|L3L3TL3,L3i LL r$PLLBLsș Ȅ ( qƚƚ` s s),;,=,#,(,,ѼLL<^L<^ llmm$P$oȘ戅 aziȅ xdo`Abi$nFn) i  j g g ^ ܇.Laz͠Lć ^ ׄ& ć ׄ ć ͠L- x |z K{ | T}{ x xnH yxn0 I B xh B Lр |  +|] {n LU{HLʁIڢIڢ-(h#5ᆥ](IڢʥnH BiHɁy U{y рhɁ xhLB` vy{| g|S}dpL}Qz}c0~~D:~L̑56gh6hegehh `iɥHHȱȱ6H6H5H s =к bqhhh Lshhhh` ~R/mZlmYZ PujHkki^^`H"h{||kjkȱ{ "ie{||  V{|56|6 w&5L<^i8e` ě u8A?pB@B@ )onL܇jkL| Nsdȩ8 NsdL2Lа,L<^ A s ׫ g iq s= sXHXHWHHHH ajL? b rLiq HHH s iqhhh5ȱ6ȱLI65 g5H6 2|Hgȑgʆ5a g5ȑgȥg <^^^__ɂ逅____<;إy6 hlhm^Ȋ^LL:^ȥ5^H^h ͎el5emȆ6п  ͎e^e__ iLZe *& eegggegȱgehh Ľ ,L<^  8` ^LQ ŠhhL6 $P 訽5 ͎56ۥ 8ee L:^?be^@ce@c __^_ \__^;<<6  $Phihi^Ȋ^6h656H |mHlHkHjHiHl5 8eeghh^__` HHH H bqh hhhn0iɐ1 }L yxL%}\i FHHHHH 6hhhHHlm ,҄ shh)>=>hgh<<;[a{p ;<<ccb? @c@ube.a{bb,\(eb cc`ebcA[8饰 a{8`8\e@@He? ]@@?hbbb0 ea ȑbc8L@ @@h5H ?5^6_6_hhXhXhWLk ? % ?Џ`5566` xe5566ɂ66` s p `  zLseff z.!'$ iߪ$ 0 H8eAi\h$ P8 (Lt$ 0}5}} ,kk} , kklm Lٓ[ 80@ 6 2`  dkH) ojhJJJJ ojL 0:i`L<^ jHHHHHH s jhLyqhhh6h6h555_ȱ5VHHHH %L/5H6H6Ht $mlmkljkij8ihn`L,$0DpA q enHi80 @Lyu \ % @u ćh `&m&l&k&j`2L0 և yxLT}$0pLI oբRLi `u LLi u Lui0 ܆ چ,,% п 擩lm0u 1eL5665`iɀ*iH i  @8 ei $ tutt tj ȡhn` t` 0RN0R 0R$n-RRR`i` p`5665i`$0BP?iH i hLbe55f5f6e}Lme6u5u }`6ʈ`v`jip` ? #  ue }~ %u $ چ 0 u}` L uu  ) }Li <i@L{i$i0 p $ 1`ui` LL Lbb `}i~ei^~0] e e^`}`566i5`_cf_cfi^eub` ?^qbep`L<^ ?8b^e` rp`I` ? ㄩp^|be #^b ebbu|beiee^^iL56^f" ऩ थ (! ( ऩ थ (" ( द!LGb8Lऩ@iu +-ELj) e | ^ .' "5 1 p) iIii i)Lm` ?i $0 ׄ $0 $0 ^`Hhth`^Qb ^^ 8` `H Jh(L悈`H逨h` Hh8 Hɀjhji` HihJi(`  ~q$L ɺ b$P i pi$ȱLdjɻƟ dj 柰ީ Lihh sLg  s ! b   s "!!!IjJkJk )lmm'&`UR{R||L̐: / cRRȹRRȥ Rл s `Lsh sh5lh6mh6mhxhyhy x x Qȱx7ȱx88 Ƃ 7e7888ł75 78ߠȘH yxy hL3 j kqHHHH s H , ,H s s ~qhh 1 lhhXhXhWWȱW7ȱW8 eLNLXZWX ` GGH HlHmHmH khmhmhlh hk8j7k8Lޒ e7788vvyLj L ʟ,-uukv kv@vvyL5Lj ʟA80멀uukeqqtt$uA)*t L; $uЫkЦuuj ysLq,kl$uhuuj XkkNuuj k 4%v. #  1$u tAvʘtDթ q(~th`pvquts~y fp$pp8j/;XAx=|8ez{{ ghh "o `L x  wwghhoؠKkqvj L`$uZuukvN kGv@  pJ LUL-LG -$p0`pog $mkڥrok8o,koLdjAaCcoJ mko 5 $mkk mLw L L HG56H6LExh  (`|||}z,A[ :808Ш`,ޞ@`y Gy`LHq,;' L Pu  pLLwl`|H}HzH{HHH ɶ# xhH s  ~q s,; Ls  ~q$ hxrL iLpnH ~hɀ8(*iR.-:/ RRhhh{hzh}h| Pu p 0|8cJcm J_mm嚍J_AgBhBh \^A_B_B` ^"( zM jF566 x}z{6{LҜ #z{{"} GLsL<^ jHHH i dj ٥z{{ j}hhh ;в| |膆  RRRRH uhA?B@7B@87F8f7877878L:^7 8*JA5gB6B68 悅h圍h?H@H@HI?J@J@ "]h@h@h?gAhBhBJJ8 悅J圍J7ߚ8BܚLs`䚌B L:^`Ib^J sL͙ɚʚ `pAƚЙϚŚњ˚ ̚8 悅DDF͚ Κ8 DiFEC CD)ӚDmӚDԚCBКLěŚAݚ⚠IȌ 8 ꂍ  8 ꂅJJ` !7Ri88 pi UŦLUUU HHHHL 2hh LW iL 2hlhkhn jhimhHɗ8 Ls`LIŚ1CUDVDVU Lŧ 0 7U L`L:^֩ ŚEĚ L| Qp QeeRee8 1 V` 痠U` hh R LsL  z (L[ Rީ  @Y%(&:$LU s և ^|iHn %jHkHlHK s n ZlHmH5 s iH jHH楩e ) ,LsLR eՅ7V8U #   785U6VLΔU7e778ҥU^V_bcF_hcCgDhebbc \^__`U8傅UV` |UȱU` L<^ |UUƜ0ƛ ӗWqeWȱWqei W` |8UUWȥVUX`UeUUVUO / +'L U)łiV VL LI 8U 7ȱ7 UU ЯUVULU7V8 p L LZ U qUU qUH85h688V77U U 5qUWȥ6qUX7qWWȥ8qWW ٥IiV) V LVU?e8V je?e>e8U>e5V?e665e=e@eee8 hx57 xLCx8I77JJ8 88` H dhjL YYHH dYZZ oxhhe5566ɂ逅66 wZZY L YIL=m ) s  ʊHYImm shhhhYhZhZHHE` 3YZZ xLCxl5Ym6Z`u vphh` Ljk ,hh`Sj9-k L9j ekekk|z)ekk |j[ ٢  L`j 9kkj"j"kеAX"+-&$.ECR/#Z*! DBA0 k$JJJJ) ݙRթR`yiɀjjn*8miɝ d L .q$uL$)JJ8偅8傪 u Tf$i0Ł!y0GLqL~䁰< 0$H ,GhGթ $u$n 0GЫ-Gv)' $G uJ-$n0+G $G0)R?eR>e5ehe?eLje LjeR=89R>:>:iR:RiRRiRL`8(RR(`EeFe  s bq Vml0L dMeL` bՍe :RRRiRȐȰRe9Re: J 2IHJh*=>> 95:6:6R L1 1Lԫ`L:^  aFL^R, ue 5eLڭR7>e?e5e?eJeKeLje֩ u>e?eՍ "] a a$% iLg֢   sLj$%`8f  a e ; ` s ɩ` YLILcopL7 z0xH ׫$0_ ;h8fH`aai shH2 h zJJJJf Ik ɩ` ̬ t os YLA ևLLק jWXX` ׫$`pd8isŠt`dyoopd8ip`J uv`&&&8孪孪宐橈`! @ uA?B@B 悅@=g>h>h ]=i>j>k a=g8i>hj>h 悅ki=5j>6k6k;el)@7Me0u(> ƬƫHH ,hohp` ɩCe0R`ȹR`ee?e@e ue 5e T L=e;e`Lso`n}pm aa`dyo ɃɄ b`" lJJJJYe s ˰L8Ls LԫN l@u=ekPe tMe )llNesOet NeOetMeCOeNeȌ=e>e;eehi?e ueL5e qrL,op ɩ`et?ek;e`hZ L<^hZL<^L=ee>e ?e`opqrst !,i-i8, ȱ,%,W,pp ڠ %p`l  " ) i SOS KRNLb.D1/SOS.INTERPŠ̠Š.D1/SOS.DRIVERР頞 0 ) (lH'&3&'&#e'#%e'%'&"$"$#%'#%h`$eh`L)i   HH `TH..TH..TH..THATS ALL, FOLKS!R`RT RT`#RT RRRRR`0R`RR 㵩:RRL㵆  ~ RR`BLOCKS FREE: BLOCKS USED: TOTAL BLOCKS: sj]"]\AjiGa@aI[5x<^sě xCxEx5eҥV{}g}gkj̐kIk~^hT}27uejewsHH st\hh H PASCODPASTXTTEXT PASDTABINARYFONT FOTO BASIC DATA WPTEXTSYSTEMRESERVRESERVCAT RPSDATRPSIDXAFDISCASMOD AFRPT SCNLIBk;eo $'>ed?e` T֩xxMH]@ Kۅ5H ɐE$ eİ Ȱ h`h`8`W h8`hR`hLҿ i x +ۅ5ۅ6 ǰ `E8<W`­ `0XLۅ5` ռ``ߤeI`IiţO`Ȯʆ/ )󘑡`()0zq 滅ѺY Ueۅ5Ѻ Ѻ  Qܐ'`i ҩ *C8/y.i/ ȑ  © $ E7<3W`ȽLֽȄ @8`R ) [)_[AͰ")[)_[A:0/.ЩȑΘ8e * ȩ`Loü 7)?۽۩ W٠Յ<ōōř ռV7 uM78 V榠=ü#)@5 ɐ /ݐE ) .) @L `lqhٯ޿=ϓTXIֲ̛̐~ؠIJK,-NOPQ0vt `` LLɠ8`ΛLL渠`0 `8`HiHiH ihhȱh`86)IH)heuQɸ` ` W` ] %饚0` W` ߰4`)|E8LLLRLLLLL*LLLLLhh`LLL`SOS 1.3 01-NOV-82(C) 1980, 1982 BY APPLE COMPUTER INC. ) `G`î** }*`o^`on 8 JJAj@` *?($`ΠņɠŠ堠РѠ͠஠әƆH v?c,,,,h߈ߢ~))`3PLLP*%(i&`Ѕ񩏍E H pph`XǠĠӠ!((ͽϠРРSOS NTRPSOS DRVR(.D1(YYYYMMDDWHHMMSSMMM̱忠ΠͽŠ堠Р͠Ю̠Ɔx߭J ʈc(()o/ e/''ʈ((''()(1i / e/''ʈ((''((''((''' ('`ŠDAY, DD-MON-YY HH:MMSUNMONTUEWEDTHUFRISATJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECԠŠР I8`  S`ۈۥۥ۩Íۭۍۭۍ հL¢H8`Jj Ȅ ۍۆeۅiۅ Lɰ ʰWۅۄ ¦J> nʰ0 ̰+泱Ƴ m° x̰ ̐8` m° x̰8 ۢ8 ˰y ` ¥ nʰ泱Ƴ T̰#泪 Ѳ *Ƴ ` L:Ϡ`泑Ƴ` LaĥH8`JȘN8`) ))УJ8` ۑȭۑǠۑۑȭۑ($S8`O8` "` / 򑺠+* ͐H h8` ΰi `()  *ǵ յý5Ņ4gȩυɩč5 iψ }.8` iϙLIѠ ˢ L΢ ΰ LϠ ˢ ΰ1` Đ@ АP8`B8`ۑJJJJ -ѥ +jѲ84ƳJJ 2ΐ3泑ƳLTΩ潑ƽ`ƱƳ ΰ( {Π۵*+)e`8`)` J J + ΰ" 0 ΰ 🱼ѼL8`ǩ Ϡ` ϰ ƑȥǑ` Ѻе*`)ȥ+8ۍې  ,ѺLTΠ"LΠ5 խ ɐ /ݐE`C8`)@ ϰa)ۥ,8ېu+J,\ ȱLJΠ) ϰ'#,J(] { ΰ ƑȥǑ.8` { ΰ,JѲ ƳL΅ƱƳ ΰҥ,J0`#$"0#`!qȱi 5H5Ƶ ǽ jh5`L2̩ƍv̥Ǎw̩ÎL%ϠƄǥLj̩۬L~̠HHh` ̐`*ѺG0?M`)J"u-- M8`۬` # ː`  = O̰)= I`JJJJѶQi Lˢ  0 ̐ `"L˦ `H8`8$$"$= O̰=`$0`#$"0`$` H hQ)fʅ F jF jF jF &!  eװ*  ̰F湥 ƹ`Z8`@  ʰ泭ۑƳ ʐ` ʐ` ˰ ƹ Wː`ۘ . . .۪8*JۦȱѶ"` ɰ Ȑ`E`Ɔ X̐8`>>5Ѷ Qܩ<`>`\ʊJJJJ ۍ۩  ˰Fȱ X̰6 0 Lɠ 0ۑۑ8ȱ`H8` ɹ $  8JJJJ8 ` ۠ǽi `< Ȱ+<#5 ې'` ɐ /ݐE`W8`R` 5&i ` Ȱ 0i `<8> ȐT eİF cȰB)Hh5 ˭)*ȑƑȥǑ'(ȑ`L)ɭ)Ѷ*e`M) `ۅH)Ѱ%}ʈh Qܐ'``hi ` p6۽ʹZ5 HȐ/i i `гW8`0( ɐ Ȱ ʮ6E`5 խ ɐ ޢ ȰLȍ۱Ǎ X̰% & !J8` *LĢ `8 iۥƍۥǍ`ۅ %  6 )Ѱ Ѱ` 𝭧e ǐ bǰL*ۈ5ȱ۠ƍȱǍ X̐ H h1  /ݐE`ۈۅ ۅ 8ƭ X̐`LLŠǠ  ݭv̅w̅ ðzv̍ŭw̍ŭƭ ­ōō T̰]ŅƮņ X̠8iȱiiȱi ṰŅǭŅ XLōۭ۩ۅ ȱ8D`F`8eYƍťǍŠ)͠ Wٍۭۅ5ۅƭۅ X̰ ìۈۑ T̰ۅƭۅ X̰ۙ%ۍ" T`K8`)` İ ۱ۈ` ưW/ۈęۈЍ۩@` 8 MƐ  5 Q8`LŅ ۅ ۩ۍۅ Lɰ ʰۅۄÍÍۙ'Ù ۍ*ۨ  Ѝ۹ۙ8v- ðJ ¥ ð, ðLO ʰƥLT`'  mې浰``8 8ة  )LBѠٳ )8`i (` )N8`*eȱ+eȱ,i۠Ѻ*ȱ+L - ť.Lkҥ. ՅL ͐Ld ~ pа.J/)@߅4 ͰU..++,,IJ/ ӥ-.?Цե,J+jѲ4Ƴǥ4聠 H hH kh8`8-ȥ.L 8*Ʊ )8 0*-`.G.ʱ*+,EP'.E.LұE0+,,ӄ*p-e󠠩à٠΀ƉŠŠӠҠȠHHH *ح)0 D) HHHH,, ߘ)@ *)X  xI)}h)L, L )ڠ) w߭)Ů􅮈 ߠ'x)) J,QJ,SJ,U,P,W(`)(()  8)j`J j߅`0X ٠͠堘ӠȠŠ=`Insert volume: Τ in device: 蠠ɠ then press the ALPHA LOCK key twicex)_ @,P,R,T,V) )) `)8( ߠ',@ ߠ0  '葺 ݰL`5`i 祻(8`2ޝ51©ޅéąŅƍ >ϩ 1ޠ== f ɰ`ޭ`5=(5= i Х(`=H hDC5 L3ܵ ɐ /ݐ 8`5 ˥JJJJ8 H h ` ܠ825H h5 ɐ /ݐ 8`Hh ܥ5 `ɥܥܥܥܥ5`܅܅܅܅܅5`( ݰ)Ѻ ݰL ݰ泱Ƴ ʰȭۮ ʰͩΪΩۦ eװqȭqLJ  ˰Aۅƭۅ X̰2%&N  ʰƭ X̐`Ӏ堁ӠҠՈ՘̠ƠŠӠ̠ɤӮȪŅ͠Ϊ ܆5 HȰۈ)ۅƭۅ X̰ 3ڰLÍLT̥L㼠  ʰ` İK ХP8` LɐH80)N  հ)@LO ˰)0 ̐` M ­۠泭ۑƳѲƱƳ X̰ RڰäJۑĥ` İo!)N8`WپX0 ĥLä X0 ĥLà !"#$ Đ2@H AڰCŰrP` 3ڰ(` AڰѶ? İG8`Fە1 ռ İ ЩP߭)@N8`1@8` Aڰ񈱴 ˦,+* ʈJj =ؠ yiȩ`y4泱ƳHhz ʠiȱizLA`L;ؠ"  `1` Đ7@8V۩ Lɠ۪8ۊ۠X)JJJƄ X Ġȱ۠ ȍ۱۠ ۭ) ۍ ð*)#  O̰``)(`N8` ) xհۈ ̰آ*գ  Ͱ ݢգ LvL{ؠ;i ڥ(8` ְ( ȱ5 HȦ)`Lxץ: ש ְ⥺i ꥻ(8`Lx Lxש u )۠0)p խ.8`)@ ϰ) ϰۈۅƭۅǭۅ5 X̰ *ƭ۬͵̶L  ΐ` Wհ> H۪ȱHۑhƳh sϰq ` ʰiȱi `)5©éՅĩ5 }JJ+`.`8`ɂ )`@ ש ְO ֤FHۑۑh8`P) հ Wհҥ,J+j泭۪ƳۑȊ ) ~ fPL ͊.>.ʱ+,EP!.E.Lw+,,ӄ*- P*e (` հB հ5 Wհ0,J۪泭ۑƳ sϰ(` L Ͱ2 ~ P kҐ#L8 T 2ΠHHȑhhȑ`Ld )N8` xհ*eȱ+eȱ,i۠Ѻ۹ۑ񥤅- ť.Lcԥ.La Ͱ$)rJ Lɰ )# Ԑ)0\-JM-, J3,e$,d,,  * *l߅߅H ߅ \xi ߅LHHH *ح)0 D) HHHH,, ߩ0  xLߍ߭lߩ * xLx @h hhh ,0)ߨ)Ah&'0HHHH xhhhh ,0)ߍLLhhh@)&&&(&('+*H)H(h)H@x )HH30.Ѥ  БĈ` H`)à`֩ нѽ>`]PU]]UPPX0 0 PPXPP  į󠠩ҙ̙ɠΠɊՐӠӢ̢ՠҠŠԠҚРĠ鱃ԠȠࠠLQ  * WHHH>%H H @`)h8`  HШБˆeЅА SYSTEM FAILURE = $hh8`hhhxآY_Z@tPRVT,p S JJJJ ) ʍL@ i0i6`îӉ͠堧ǥӥ``HhHy)(h`H` 0L?i `h` `` `x)( 8 `jjJJԥ)եӬɂ )Ӆ҅`  `H0Xh`Π'à̠ȈL` 8`څ  Lk%  Lk8Lu텚8嚅 L L Ld V ``  h` ک V `ۅץ  VLFx) ( :` H ) L  .P'pб0 &L:L5'8+8`0Fܢ` ř,Ř 0 8f)J ӭƅХDžѥL1LUȑ  i ߩLL )  札)  ҩLL` **éL0;` H ) 4 )ߍ) hjjjjۥ0CF = -$(L !LLL&L L-LJ٥eƦ ,L  # ` (L.L…ҥÅ,] Xx,f (I0јIFjFjFji```x@gŽPy+wLwԠ͠ŠԹ.D1 .D2 .D3 .D`HJJJJh)y` (2P Q,PQ"PɀQ@PAQ`8`nɀ<)nopoLpp` 0h8蘠fȊf` ab 1abo)abaݰb L9c`` a N0Ioa0H ha`pLopna n`  3ɠ/8 L %iLɠ8逨J Hh $`b >_-%^%p_^^_ab"08^c_L8^c_L8^c_L8^c_ȑcc\] ab^_ ``aV R0M bba dda `Q8STRQ ST`c\ȱc]a  b 5DU e\^e]_ ^_ ^_LH8\^]_?Je\^e]_,78\^]_ ^ݰ_ ^_LH^_ $bL@A^_aoQ*@A RQL@A `T8`RLSJTKQHIQiHiIKNJ)M8逅OPOPHMIN'a MHNILHOIPaOHPI8JHFKIGFGaHMINNMʆSTL8HSITQQSTde0f`   cCȱcD C Ea  UV 1 ELUFVG FUUCVDեYCWZDXWXCUDV[ v`b0WXYZiUcȥVcWX eeYZ ggE` @SATRDžŠƠŚ̮ÎȠ Ӡ̠Ӡ` LL#L/LL'Lgab `abBcd cdBrcadbho:ab.cݰdDcݰd8abҊ v+abcabRcdTefVghXijSdfhj RR`^0U ` 0 ʠ0 8 `ůàՠԠàࠝӢӠ ȠDž̖͌͊頀ϐωŠŠӠҠȠγ`%!^0 ^)@`a R =` *^)ـooL]^)?i |TU QTU]qUoqTITsUsprRprqs]ToUXa` RL=Xa` R` *R`X`U T  *\AX[ @F\B9ɏ5\o*Ɂo)[[ @^`U V  *C?^0: ݳ ٢ ^)?i` *)@o `p^ XiH 1h `)X0 8~X 1`C X`)X0`C РǠ𠠐ŠŠӠҠȠƠŮƠҢâӠUAQY @?ZY 9ZYY^TU QZoȥɭ }`` ? }``  }`X0i 8~XX0H }h襯` ©Wéĭ }0W`F X0A */5BL. zF`LLz Lz`Y `Ơ堧 B k L( LO  %   }` ` ?!©UéĩU󥣍V }`` ?)5,25.250 920904,485,25.375,25.000,25.000 920908,217,25.250,25.000,25.250 920909,1225,26.875,25.000,26.875 920910,1671,26.875,25.500,26.500 920911,1631,27.500,26.375,27.375 920914,1967,28.500,27.750,28.500 920915,1235,28.375,27.375,27.625 where the commas separate the various pieces of daily information that were requested. In this example each row contained five items: ,,,, Second, a means for transferring these data from the downloadede adds a ".XX" suffix and ASCIDIF adds a ".ASCI" suffix, so the original file name should be 7 characters or less in length if these two default conditions are to be accepted.) IMPORTANT NOTE! All of the above has involved moving information from a downlname as the original ASCII file but with ".XX" added as a suffix. ASCIDIF will now properly load this new file into VISICALC using the DIF file loading procedure. Use COLUMN arrangement when prompted during the installation. (The BASIC program given her2;B$:REM Builds new file 560 C=C+1:B$="" 580 IF C<=Z THEN NEXT Q:REM Continue until end of line 600 PRINT B$ 620 C=1:B$="" 640 NEXT R:REM Continue until last A$(L) is parsed 660 CLOSE The newly rearranged file will have the same 420 FOR Q=1 TO Z:REM Parses each line into individual B$ 440 P$=MID$(A$(R),C,1) 460 IF P$="," GOTO 540:REM Comma found, print B$ 480 B$=B$+P$:REM Builds B$ until comma is found 500 C=C+1 520 NEXT Q 540 PRINT#PUT,G$ 240 OUTREC=255 260 ON ERR GOTO 340:REM Read until end of file 280 FOR L=1 TO 2000:REM Reads each line into A$(L) variable 300 INPUT#1;A$(L) 320 NEXT L 340 OFF ERR 360 C=1:B$="" 380 FOR R=1 TO(L-1) 400 Z=LEN(A$(R)) FULL pathname of file to be read, e.g. '.Dx/': ";F$ 140 G$=F$+".XX":REM New filename same as orig with .XX added 160 HOME 180 DIM A$(2000),B$(100):REM More than enough space for most files 200 OPEN#1 AS INPUT,F$ 220 OPEN#2 AS OUT B2 C2 D2 E2 A3 B3 etc. Again, this could be done manually, but it would be better if a computer would do the rearranging. The following simple BASIC program will perform this task on comma-delimited ASCII files. 100 HOME 120 VPOS=10:INPUT"EnterB2,C2,D2,E2 A3,B3,C3,D3,E3 etc. so that ASCIDIF reads all five entities within one row as ONE STRING to be entered into ONE COLUMN of the spreadsheet. This is not what is needed. The downloaded ASCII file must first be rearranged to: A1 B1 C1 D1 E1 A2 A3 B3 C3 and a GROUPING OF THREE is specified, a spreadsheet will be loaded as follows: A1 B1 C1 A2 B2 C2 A3 B3 C3 Unfortunately, the ASCII file generated during stock information download has this structure: A1,B1,C1,D1,E1 A2,e program (ASCIDIF) interprets text up to a RETURN as a single string or line, and each single line will appear in a column of the spreadsheet. If the ASCII file has this arrangement, where each letter represents a string of characters: A1 B1 C1 A2 B2 C2 error during the transfer process. A while ago, our good friend Dr. Al Bloom, generated a fine piece of software to convert ASCII files to DIF files and DIF files CAN be read by VISICALC. In this way, a transfer into VISICALC would be possible. Now, thC cannot do this. Obviously, entry of these data could be done item by item manually, and although this would be a lot easier than extracting each item from a newspaper, it is still laborious and time-consuming. There is also the danger of introducing an ASCII file onto a spreadsheet is needed. Many if not most of the newer computer spreadsheets have file transfer capabilities that will read an ASCII file into a spreadsheet placing each segment of the string in its correct column. Unfortunately, VISICAL Category: UTILITIES" 1,0 " Disk Format: Self-booting BASIC (Side One)" 1,0 " Self-booting PASCAL (Side Two) " 1,0 "" 1,0 " This is the second of the Washington Apple Pi /// SIG's Pascal Pro=C+1 520 NEXT Q 540 PRINT#2;B$:REM Builds new file 560 C=C+1:B$="" 580 IF C<=Z THEN NEXT Q:REM Continue until end of line 600 PRINT B$ 620 C=1:B$="" 640 NEXT R:REM Continue until last A$(L) is parsed 660 CLOSE FOR R=1 TO(L-1) 400 Z=LEN(A$(R)) 420 FOR Q=1 TO Z:REM Parses each line into individual B$ 440 P$=MID$(A$(R),C,1) 460 IF P$="," GOTO 540:REM Comma found, print B$ 480 B$=B$+P$:REM Builds B$ until comma is found 500 CPEN#1 AS INPUT,F$ 220 OPEN#2 AS OUTPUT,G$ 240 OUTREC=255 260 ON ERR GOTO 340:REM Read until end of file 280 FOR L=1 TO 2000:REM Reads each line into A$(L) variable 300 INPUT#1;A$(L) 320 NEXT L 340 OFF ERR 360 C=1:B$="" 380 100 HOME 120 VPOS=10:INPUT"Enter FULL pathname of file to be read, e.g. '.Dx/': ";F$ 140 G$=F$+".XX":REM New filename same as orig with .XX added 160 HOME 180 DIM A$(2000),B$(100):REM More than enough space for most files 200 O (New Version!!) to load VISICALC. The rest is up to you. the Apple /// and VISICALC for stock market analysis, first download the desired data set in comma-delimited ASCII format, clean out extraneous and unneeded text from the download, use the REARRANGE Basic program to reorganize the information, use ASCIDIF enters a NUMBER as a VALUE and a STRING as a LABEL thereby eliminating the one big drawback to stock data transfer. After this new version of ASCIDIF has loaded VISICALC, the entries are ready for any mathematical maneuvering desired. In summary, to usejected to mathematical attention had to be converted to VALUE format manually (and tediously). Responding to my call for help, Dr. Al Bloom was kind enough to generate a new version of ASCIDIF, vers. 05.93, that takes the rearranged listing of records andoaded ASCII file into VISICALC, but the ORIGINAL version of ASCIDIF produced a DIF file that loaded these data into the spreadsheet in LABEL format and LABELS do not lend themselves to mathematical operations. So, at this point any data that was to be subgram" 1,0 "offerings. It's provided by /// SIG member Allan Bloom, PhD and is called" 1,0 "ASCIDIF. It will enable you to convert from ASCII to DIF files and back simply"