|
Ron, I understand were you are coming from....you've probably seen some disclaimers on some of my posts that dealt with my older code <grin>. However, while you mention that this is a "one-time" conversion, consider the following: You borrowed the code from someplace else, possibly another one-timer? Whose knows how long this program will stick around. Unless you are in the habit of deleting the source and object for "one-time" programs after use. Imagine the code like so: /FREE *InOf = *On; // Clear out the existing data that may be in the files Cmd = 'CLRPFM FILE(WPUSCHEDLE)'; CallP(E) QCmdExc(Cmd:%Len(Cmd)); Cmd = 'CLRPFM FILE(CGARAREA)'; CallP(E) QCmdExc(Cmd:%Len(Cmd)); Open Wpuschedle; Open Cgararea; // Loop thru all the records in the file Read Streetgarb; Dow Not %Eof(Streetgarb); f1_Work = strnm; rec_Count = rec_Count + 1; f1_Work = TrimFromFoundSubStr( f1_Work : '- P' ); f1_Work = TrimFromFoundSubStr( f1_Work : '- P' ); f1_Work = TrimFromFoundSubStr( f1_Work : '- p' ); f1_Work = TrimFromFoundSubStr( f1_Work : '-P' ); // ect., ect. You might even consider placing all the calls to TrimFromFoundSubStr() into their own procedure, maybe CleanupInput()? Now consider how easy your life would be now, if sometime prior somebody went through the trouble of reworking the code to use a procedure. Even better, if the TrimFromFoundSubstr() had be created in a service program for easy reuse with out needing a copy/paste. How many current/future programs could use this TrimFromFoundSubstr()? Leaving things alone is always easier in the present. The benefits of reworking the code mostly pay off in the future. It sometimes seems hard to see how reworking would be worth the trouble. But, often if you look at the benefits you would have had if the code had already been reworked, it is easy to see that it makes sense to rework it now. Remember, better late than never! Charles Wilt -- iSeries Systems Administrator / Developer Mitsubishi Electric Automotive America ph: 513-573-4343 fax: 513-398-1121 > -----Original Message----- > From: wdsci-l-bounces@xxxxxxxxxxxx > [mailto:wdsci-l-bounces@xxxxxxxxxxxx]On Behalf Of RPower@xxxxxxxxxx > Sent: Wednesday, July 13, 2005 7:42 AM > To: Websphere Development Studio Client for iSeries > Subject: RE: [WDSCI-L] Indentation issue or I'm losing my mind? > > > Hey no offense taken. That code is partly "ripped off" a > colleague here, > and I added some extra stuff to it and converted it to free > format. If > you are referring to the bunch of "IF" statements one after > the other, > that's the old code. I'd rework it if I had time, but alas... > My code is the couple of procedures, and I'm "new" to them so... > It is ugly though, I agree. But it's just a one time > conversion program > too... > > Ron Power > Programmer > Information Services > City Of St. John's, NL > P.O. Box 908 > St. John's, NL > A1C 5M2 > Tel: 709-576-8132 > Email: rpower@xxxxxxxxxx > Website: http://www.stjohns.ca/ > ______________________________________________________________ > _____________ > Success is going from failure to failure without a loss of > enthusiasm. - > Sir Winston Churchill > > > > > "Wilt, Charles" <CWilt@xxxxxxxxxxxx> > Sent by: wdsci-l-bounces@xxxxxxxxxxxx > 2005/07/12 04:36 PM > Please respond to > Websphere Development Studio Client for iSeries <wdsci-l@xxxxxxxxxxxx> > > > To > "Websphere Development Studio Client for iSeries" > <wdsci-l@xxxxxxxxxxxx> > cc > > Subject > RE: [WDSCI-L] Indentation issue or I'm losing my mind? > > > > > > > Ron, > > Not trying to offend...just offer a little constructive criticism.... > > But didn't I just see a post from you on the RPG list saying > how you liked > being able to use procedures? > > IMHO, you really, really should consider breaking this down. > The current > complexity of this is enormous. > > Respectfully, > > Charles Wilt > -- > iSeries Systems Administrator / Developer > Mitsubishi Electric Automotive America > ph: 513-573-4343 > fax: 513-398-1121 > > > > -----Original Message----- > > From: wdsci-l-bounces@xxxxxxxxxxxx > > [mailto:wdsci-l-bounces@xxxxxxxxxxxx]On Behalf Of RPower@xxxxxxxxxx > > Sent: Tuesday, July 12, 2005 2:24 PM > > To: wdsci-l@xxxxxxxxxxxx > > Subject: [WDSCI-L] Indentation issue or I'm losing my mind? > > > > > > I've got a program that I used the indentation feature on, > > and it's giving > > me the error "Indentation Mismatch occurred". But I don't see the > > problem. I'll post the code now, and perhaps someone can > > copy/paste and > > see if they get the same thing. I've double checked my if's > > and do's but > > to no avail... perhaps I'm losing it... it is possible. > > > > H Dftname(Streets) Datedit(*YMD) Option(*Srcstmt:*NoDebugIo) > > H Dftactgrp(*NO) Actgrp('QILE') > > FStreetgarbuf e k Disk > > FStreet05 if e k Disk > > F Rename(Streetsr:Streets5) > > F Prefix($) > > FStreet03 if e k Disk > > F Rename(Streetsr:Streets3) > > F Prefix(#) > > FCgararea o e k Disk Usropn > > FWpuschedleo e k Disk Usropn > > FList88 o f 132 Printer > > F Oflind(*InOf) > > ? // > > D tabtm s 3 Dim(12) Ctdata Perrcd(1) > > D tabac s 2 Dim(12) Alt(Tabtm) > > ? // > > D f1t s 34 Varying > > ? // > > D pos s 2 0 > > D end_pos s 2 0 > > D result s 34 Varying > > D len s 2 0 > > D f1_Key s 30 > > D f1_Work s 30 > > D counter s 4 0 > > D rec_Count s 4 0 > > D totals s 40 > > D charDate s 8 > > D strnm_Trimmed s 30 > > D strnm_100a s 100 > > D strnm_100b s 100 > > D strnm_100c s 100 > > D Cmd s 300A Inz > > //-Define constant > > fields-------------------------------------------------------- > > D area1 c const('AREA 1') > > D area2 c const('AREA 2') > > D area3 c const('AREA 3') > > D area4 c const('AREA 4') > > D area5 c const('AREA 5') > > D dontdo c const('DON''T DO') > > D residents c const('(Residents') > > D civic_no c const('(Civic') > > //-------------------------------------------------- > > // Procedure name: GetDate > > // Purpose: Reformat the date > > // Returns: > > //-------------------------------------------------- > > D GetDate PR LIKE(charDate) > > D inDate LIKE(Date1) > > //-------------------------------------------------- > > //-------------------------------------------------- > > // Procedure name: Get_Comments > > // Purpose: Gets the street commments > > // Returns: Street comments > > //-------------------------------------------------- > > D Get_Comments PR 40A > > D inStreet 300A > > //-------------------------------------------------- > > // Procedure name: Qcmdexc > > // Purpose: To allow the running of CL commands > > // Returns: > > // Parameter: Cmd => Command to run > > // Parameter: CmdLen => Length of command to run > > //-------------------------------------------------- > > D QCmdExc PR EXTPGM('QCMDEXC') > > D Cmd 3000A Const Options(*VARSIZE) > > D CmdLen 15P 5 Const > > D Cmddbcs 3A Const Options(*NOPASS) > > //-------------------------------------------------- > > ? // > > /FREE > > *InOf = *On; > > // Clear out the existing data that may be in the files > > Cmd = 'CLRPFM FILE(WPUSCHEDLE)'; > > CallP(E) QCmdExc(Cmd:%Len(Cmd)); > > Cmd = 'CLRPFM FILE(CGARAREA)'; > > CallP(E) QCmdExc(Cmd:%Len(Cmd)); > > Open Wpuschedle; > > Open Cgararea; > > // Loop thru all the records in the file > > Read Streetgarb; > > Dow Not %Eof(Streetgarb); > > f1_Work = strnm; > > rec_Count = rec_Count + 1; > > // Check for '- P' and remove everything after > > pos = 0; > > pos = %Scan( '- P' : f1_Work:1 ); > > If pos > 1; > > f1t = %trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '- P' and remove everything after > > pos = 0; > > pos = %Scan( '- P' : f1_Work:1 ); > > If pos > 1; > > f1t = %trim(f1_Work); > > len = (pos - 1); > > result = %subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '- p' and remove everything after > > pos = 0; > > pos = %Scan( '- p ' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '-P' and remove everything after > > pos = 0; > > pos = %Scan( '-P' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '- ped' and remove everything after > > pos = 0; > > pos = %Scan( '- ped' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '- (p' and remove everything after > > pos = 0; > > pos = %Scan( '- (p' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '- (pe' and remove everything after > > pos = 0; > > pos = %Scan( '- (ped' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '(p' and remove everything after > > pos = 0; > > pos = %Scan( ' (p' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '(M' and remove all after > > pos = 0; > > pos = %Scan( '(M' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '(A' and remove all after > > pos = 0; > > pos = %Scan( '(A' : f1_Work:1 ); > > If pos > 1; > > f1t = %trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '- (' and remove all after > > pos = 0; > > pos = %Scan( '- (' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for '(G' and remove everything after > > pos = 0; > > pos = %Scan( '(G' : f1_Work:1 ); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // Check for ' (' and remove everything after > > pos = 0; > > pos = %Scan( ' (' : f1_Work:1); > > If pos > 1; > > f1t = %Trim(f1_Work); > > len = (pos - 1); > > result = %Subst(f1_Work:1:len); > > f1_Work = result; > > EndIf; > > // See what we can do about getting a street number for it > > f1_Key = f1_Work; > > Chain f1_Key Streets5; > > If %Found(Street05); > > cgstreet# = $cstret; > > cgstseq# = 0; > > cgstname = $cstact; > > cgstext = *blanks; > > cgcivics = *blanks; > > cgcivice = *blanks; > > cgstrcom = Get_Comments(strnm); > > cgsp05a = Stid; > > If area <> dontdo; > > cggarbarea = %subst(area:6:1); > > Else; > > cggarbarea = *Blanks; > > EndIf; > > Write(E) Cgararear; > > Dow %Error; > > cgstseq# += 1; > > Write(E) Cgararear; > > EndDo; > > pos = 0; > > pos = %Scan(civic_no:strnm); > > If pos > 1; > > strnm_100a = %Subst(strnm:1:100); > > strnm_100b = %Subst(strnm:101:100); > > strnm_100c = %Subst(strnm:201:100); > > If *Inof; > > Except Header; > > EndIf; > > Except CivicDet; > > EndIf; > > If area <> dontdo; > > Exsr Sched; > > EndIf; > > Else; > > Chain f1_Key Streets3; > > If %Found(Street03); > > cgstreet# = #cstret; > > cgstseq# = 0; > > cgstname = #cstact; > > cgstext = *blanks; > > cgcivics = *blanks; > > cgcivice = *blanks; > > cgstrcom = Get_Comments(strnm); > > cgsp05a = Stid; > > If area <> dontdo; > > cggarbarea = %subst(area:6:1); > > Else; > > cggarbarea = *Blanks; > > EndIf; > > Write(E) Cgararear; > > Dow %Error; > > cgstseq# += 1; > > Write(E) Cgararear; > > EndDo; > > pos = 0; > > pos = %Scan(civic_no:strnm); > > If pos > 1; > > strnm_100a = %Subst(strnm:1:100); > > strnm_100b = %Subst(strnm:101:100); > > strnm_100c = %Subst(strnm:201:100); > > If *Inof; > > Except Header; > > EndIf; > > Except CivicDet; > > EndIf; > > If area <> dontdo; > > Exsr Sched; > > EndIf; > > Else; > > counter = counter + 1; > > If *InOf; > > Except Header; > > *InOf = *Off; > > EndIf; > > strnm_Trimmed = %Subst(strnm:1:30); > > Except Detail; > > EndIf; > > EndIf; > > Clear Cgararear; > > f1_Key = *Blanks; > > f1_Work = *Blanks; > > Read Streetgarb; > > EndDo; > > Totals = %Char(counter) + ' ' + 'Records- > > not found on STREETS file.'; > > If *Inof; > > Except Header; > > EndIf; > > Except Total_Line; > > Close Wpuschedle; > > Close Cgararea; > > *InLr = *On; > > > > //------------------------------------------------------------ > > --------- > > // Build pickup schedule file > > BegSr Sched; > > Wpuyear = 2005; > > Wpuarea = %subst(area:6:1); > > Wpustr# = Cgstreet#; > > Wpucnt11 = 1; > > Wpuap#11 = 1; > > Wpumax11 = 75; > > Wpucnt12 = 1; > > Wpuap#12 = 1; > > Wpumax12 = 75; > > Wpucnt13 = 1; > > Wpuap#13 = 1; > > Wpumax13 = 75; > > Wpucnt21 = 1; > > Wpuap#21 = 1; > > Wpumax21 = 75; > > Wpucnt22 = 1; > > Wpuap#22 = 1; > > Wpumax22 = 75; > > Wpucnt23 = 1; > > Wpuap#23 = 1; > > Wpumax23 = 75; > > Wpucnt31 = 1; > > Wpuap#31 = 1; > > Wpumax31 = 75; > > Wpucnt32 = 1; > > Wpuap#32 = 1; > > Wpumax32 = 75; > > Wpucnt33 = 1; > > Wpuap#33 = 1; > > Wpumax33 = 75; > > Wpusp30a = *blanks; > > Wpusp20a = *blanks; > > Wpusp10a = *blanks; > > Wpusp05a = Stid; > > Wpusp01a = *blanks; > > Wpusp92s = 0; > > Wpusp72s = 0; > > Wpusp52s = 0; > > Wpusp90s = 0; > > Wpusp70s = 0; > > Wpusp50s = 0; > > Wpusp30s = 0; > > Wpusp10s = 0; > > // > > Select; > > When area = area1; > > Wpufrdte10 = 20050621; > > Wputodte10 = 20050630; > > charDate = GetDate(Date1); > > Wpupudte11 = %Int(charDate); > > charDate = GetDate(Date2); > > Wpupudte12 = %Int(charDate); > > Wpupudte13 = 0; > > Wpufrdte20 = 20050801; > > Wputodte20 = 20050805; > > charDate = GetDate(Date3); > > Wpupudte21 = %Int(charDate); > > Wpupudte22 = 0; > > Wpupudte23 = 0; > > Wpufrdte30 = 20050906; > > Wputodte30 = 20050909; > > charDate = GetDate(Date4); > > Wpupudte31 = %Int(charDate); > > Wpupudte32 = 0; > > Wpupudte33 = 0; > > // > > When area = area2; > > Wpufrdte10 = 20050606; > > Wputodte10 = 20050617; > > charDate = GetDate(Date1); > > Wpupudte11 = %Int(charDate); > > charDate = GetDate(Date2); > > Wpupudte12 = %Int(charDate); > > Wpupudte13 = 0; > > Wpufrdte20 = 20050725; > > Wputodte20 = 20050729; > > charDate = GetDate(Date3); > > Wpupudte21 = %Int(charDate); > > Wpupudte22 = 0; > > Wpupudte23 = 0; > > Wpufrdte30 = 20050829; > > Wputodte30 = 20050902; > > charDate = GetDate(Date4); > > Wpupudte31 = %Int(charDate); > > Wpupudte32 = 0; > > Wpupudte33 = 0; > > // > > When area = area3; > > Wpufrdte10 = 20050524; > > Wputodte10 = 20050603; > > charDate = GetDate(Date1); > > Wpupudte11 = %Int(charDate); > > charDate = GetDate(Date2); > > Wpupudte12 = %Int(charDate); > > Wpupudte13 = 0; > > Wpufrdte20 = 20050718; > > Wputodte20 = 20050722; > > charDate = GetDate(Date3); > > Wpupudte21 = %Int(charDate); > > Wpupudte22 = 0; > > Wpupudte23 = 0; > > Wpufrdte30 = 20050822; > > Wputodte30 = 20050826; > > charDate = GetDate(Date4); > > Wpupudte31 = %Int(charDate); > > Wpupudte32 = 0; > > Wpupudte33 = 0; > > // > > When area = area4; > > Wpufrdte10 = 20050509; > > Wputodte10 = 20050520; > > charDate = GetDate(Date1); > > Wpupudte11 = %Int(charDate); > > charDate = GetDate(Date2); > > Wpupudte12 = %Int(charDate); > > Wpupudte13 = 0; > > Wpufrdte20 = 20050712; > > Wputodte20 = 20050715; > > charDate = GetDate(Date3); > > Wpupudte21 = %Int(charDate); > > Wpupudte22 = 0; > > Wpupudte23 = 0; > > Wpufrdte30 = 20050815; > > Wputodte30 = 20050819; > > charDate = GetDate(Date4); > > Wpupudte31 = %Int(charDate); > > Wpupudte32 = 0; > > Wpupudte33 = 0; > > // > > When area = area5; > > Wpufrdte10 = 20050426; > > Wputodte10 = 20050506; > > charDate = GetDate(Date1); > > Wpupudte11 = %Int(charDate); > > charDate = GetDate(Date2); > > Wpupudte12 = %Int(charDate); > > Wpupudte13 = 0; > > Wpufrdte20 = 20050704; > > Wputodte20 = 20050708; > > charDate = GetDate(Date3); > > Wpupudte21 = %Int(charDate); > > Wpupudte22 = 0; > > Wpupudte23 = 0; > > Wpufrdte30 = 20050808; > > Wputodte30 = 20050812; > > charDate = GetDate(Date4); > > Wpupudte31 = %Int(charDate); > > Wpupudte32 = 0; > > Wpupudte33 = 0; > > // > > EndSl; > > // write bulk record > > Wpgtype = 'B'; > > Write(e) Wpuschedlr; > > // write metal record > > Wpgtype = 'M'; > > Wpumax11 = 50; > > Wpumax12 = 50; > > Wpumax13 = 50; > > Wpumax21 = 50; > > Wpumax22 = 50; > > Wpumax23 = 50; > > Wpumax31 = 50; > > Wpumax32 = 50; > > Wpumax33 = 50; > > Write(e) Wpuschedlr; > > EndSr; > > > > //------------------------------------------------------------ > > --------- > > /END-FREE > > OList88 e Header 2 1 > > O 55 'Streets > > not found on > > STREE- > > O TS file' > > // > > O e Header 1 > > O 5 'Rec #' > > O 19 'Actual Field' > > O 54 'Key Value' > > // > > O e Header 1 > > O 5 '_____' > > O 42 > > '__________________________- > > O ________' > > O 75 > > '__________________________- > > O ____' > > // > > O e Detail 1 > > O rec_Count k 6 > > O strnm_Trimmed 42 > > O f1_Work 75 > > // > > O e CivicDet 1 > > O 'Civics > > to be entered > > for' > > O +1 'street: ' > > O e CivicDet 1 > > O strnm_100a 130 > > O e CivicDet 1 > > O strnm_100b 130 > > O e CivicDet 1 > > O strnm_100c 130 > > // > > O e Total_Line 2 > > O 6 'Total:' > > O Totals 40 > > > > //-------------------------------------------------- > > // Procedure name: GetDate > > // Purpose: Reformat the date > > // Returns: > > //-------------------------------------------------- > > P GetDate B > > D GetDate PI LIKE(charDate) > > D inDate LIKE(Date1) > > // Local fields > > D charMonth s 3 > > D charDay s 2 > > D retField S LIKE(charDate) > > /FREE > > charMonth = %Subst(inDate:1:3); > > /END-FREE > > C charMonth LookUp tabtm tabac > > > > 99 > > /FREE > > charDay = '00'; > > EvalR charDay = %trim(%subst(inDate:5:2)); > > retField = '2005' + tabac + charDay; > > Return retField; > > /END-FREE > > P GetDate E > > //-------------------------------------------------- > > // Procedure name: GetDate > > // Purpose: Reformat the date > > // Returns: > > //-------------------------------------------------- > > P Get_Comments B > > D Get_Comments PI 40A > > D inStreet 300A > > // Local fields > > D retField S 40A > > /FREE > > pos = 0; > > pos = %Scan(residents:inStreet); > > If pos > 1; > > end_pos = %Scan(')':inStreet:pos); > > result = %Subst(inStreet:pos+1:end_pos-(pos+1)); > > retField = %Trim(result); > > Else; > > retField = *Blanks; > > EndIf; > > Return retField; > > /END-FREE > > P Get_Comments E > > ** > > JAN01 > > FEB02 > > MAR03 > > APR04 > > MAY05 > > JUN06 > > JUL07 > > AUG08 > > SEP09 > > OCT10 > > NOV11 > > DEC12 > > > > > > > > And the indent list with the problem is as follows for the section: > > If pos > 1; > > end_pos = %Scan(')':inStreet:pos); > > result = > > %Subst(inStreet:pos+1:end_pos-(pos+1)); > > retField = %Trim(result); > > Else; > > | retField = *Blanks; > > EndIf; > > > > The If doesn't line up with anything.... > > > > TIA, > > > > Ron Power > > Programmer > > Information Services > > City Of St. John's, NL > > P.O. Box 908 > > St. John's, NL > > A1C 5M2 > > Tel: 709-576-8132 > > Email: rpower@xxxxxxxxxx > > Website: http://www.stjohns.ca/ > > ______________________________________________________________ > > _____________ > > Success is going from failure to failure without a loss of > > enthusiasm. - > > Sir Winston Churchill > > -- > > This is the Websphere Development Studio Client for iSeries > > (WDSCI-L) mailing list > > To post a message email: WDSCI-L@xxxxxxxxxxxx > > To subscribe, unsubscribe, or change list options, > > visit: http://lists.midrange.com/mailman/listinfo/wdsci-l > > or email: WDSCI-L-request@xxxxxxxxxxxx > > Before posting, please take a moment to review the archives > > at http://archive.midrange.com/wdsci-l. > > > > -- > This is the Websphere Development Studio Client for iSeries > (WDSCI-L) > mailing list > To post a message email: WDSCI-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/wdsci-l > or email: WDSCI-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/wdsci-l. > > -- > This is the Websphere Development Studio Client for iSeries > (WDSCI-L) mailing list > To post a message email: WDSCI-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/wdsci-l > or email: WDSCI-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/wdsci-l. >
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.