home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ENTERPRS
/
CPM
/
UTILS
/
S
/
SCOPY05F.LBR
/
SCOPY.DZC
/
SCOPY.DOC
Wrap
Text File
|
1991-05-08
|
14KB
|
376 lines
SCOPY¼ Versioε 0.5
Screeε OrienteΣ Filσ Cop∙ Utility
Author║ RoΓ Friefeld
Date║ Ma∙ 5¼ 1991
Require≤ ZCPR│ o≥ Z3PLU╙ anΣ extendeΣ TCAP
SCOP┘ álog≤ áiε át∩ átw∩ directorie≤ áa⌠ áonce¼ áthσ ásourcσ áanΣ ì
destination¼ áanΣ ádisplay≤ átheφ áiε ávertica∞ áwindows« áá Cop∙ ì
command≤ arσ mucΦ likσ ZFILER's║ an∙ ZFILE╥ use≥ shoulΣ bσ áablσ ì
t∩ usσ thσ basiπ function≤ immediately« SCOP┘ als∩ ha≤ áextensivσ ì
suppor⌠ áfo≥ filσ datestampinτ witΦ command≤ t∩ selec⌠ áanΣ ácop∙ ì
file≤ b∙ date« SCOP┘ i≤ no⌠ intendeΣ t∩ bσ ß comprehensivσ áfilσ ì
managemen⌠ utilit∙ likσ ZFILE╥ o≥ DATSWEEP«
Yo⌡ neeΣ t∩ instal∞ aε extendeΣ TCA╨ 4─ fo≥ you≥ terminal« SCOP┘ ì
wil∞ áno⌠ áworδ withou⌠ Insert/Deletσ Linσ anΣ Clea≥ át∩ áEnΣ áoµ ì
Screen« á I⌠ áals∩ ámake≤ optiona∞ usσ áoµ ácurso≥ áon/off¼ álinσ ì
graphics¼ áanΣ ácharacte≥ attribute≤ (t∩ underlinσ áß áfilσ ánamσ ì
characte≥ witΦ it≤ attributσ set.⌐
Z3PLU╙ áUsers║ á Thi≤ áversioε áoµ áSCOP┘ ádoe≤ áno⌠ ácop∙ ááfilσ ì
datestamps«
SYNTAX║ SCOP┘ <sourcσ dir:>[mask▌ <des⌠ dir:╛ OR
SCOP┘ <des⌠ dir:>[mask]
Iµ átw∩ directorie≤ arσ given¼ thσ sourcσ i≤ thσ firs⌠ áone« á Iµ ì
onl∙ áonσ áDI╥ ái≤ given¼ i⌠ i≤ thσ átarge⌠ ádirectory¼ áanΣ áthσ ì
currentl∙ loggeΣ DI╥ i≤ thσ sourcσ directory« Thσ optiona∞ áMAS╦ ì
i≤ automaticall∙ wildcarded«
Example: These three are equivalent --
B0:WORK>scopy backup:x.c or,
B0:WORK>scopy x.c backup: or,
B0:WORK>scopy work:x.c backup:
source: work:
destination: backup:
mask║ x*.c??
B0:SCOP┘ ╪ --╛ Error║ Scr=Dest
Filσ áoperation≤ arσ bΘ-directional¼ s∩ i⌠ doesn'⌠ reall∙ ámatte≥ ì
whicΦ i≤ thσ maste≥ anΣ whicΦ i≤ thσ targe⌠ directory«
è -- SCOPY COMMANDS --
C - Copy M - Move D - Delete R - Rename
T - Tag U - Untag W - Wild Tag Y - Retag
J - Jump ^J,H - ReJump (Hop) ╦ ¡ Comparσ ╓ ¡ View
` - Jump Taτ ■ ¡ Jum≡ Untaτ 1 - Jump One 2 - Jump Two
G - Group: Archive/ Copy/ Delete/ Move/ Reverse/ Tag/ Untag» View
Equate» Kompare» New
¡¡ áMisπ ¡¡ ¡¡ Curso≥ ¡¡ ¡¡ áW╙ DiamonΣ, Arro≈ Keys--
X - eXit SCOPY ^R - SCREE╬ To≡ Linσ Up
L - Loτ Ne≈ ^C - ó Bottoφ ^
╧ ¡ Optioε toggle≤ ^F ¡ ó Nex⌠ Pre÷ File ╝ ╛ Nex⌠ File
TA┬ ¡ SwitcΦ Lists ^A - ó Pre÷ v
┌ ¡ Zi≡ Copy ^T ¡ FIL┼ Firs⌠ Linσ Down
^┬ ¡ ó Last
S╨ ¡ ó Next
B╙ ¡ ó Prev
BRIE╞ DESCRIPTIONS
Notσ tha⌠ curso≥ command≤ arσ availablσ t∩ jum≡ t∩ thσ nex⌠ áFIL┼ ì
iε áthσ curren⌠ windo≈ (<SP>⌐ o≥ t∩ thσ nex⌠ LIN┼ oµ thσ ádispla∙ ì
(^X)« Thσ director∙ display≤ arσ interleaved¼ s∩ therσ coulΣ ábσ ì
man∙ blanδ line≤ betweeε files.
├ áCop∙ ¡ SenΣ filσ a⌠ pointe≥ t∩ othe≥ directory« Aε arro≈ áa⌠ ì
áááthσ áto≡ oµ thσ screeε show≤ thσ cop∙ direction« á Copyinτ ái≤ ì
ááácontrolleΣ b∙ verificatioε flag≤ describeΣ below.
═ Movσ ¡ Copy¼ theε deletσ sourcσ file.
╘ Taτ ¡ Marδ ß filσ fo≥ ß Grou≡ operation.
┘ áRetaτ ¡ Wheε ß Grou≡ operatioε run≤ througΦ thσ átaggeΣ áfilσ ì
ááálist¼ thσ file≤ arσ "softó tagged« Thi≤ commanΣ retag≤ them.
R Rename
áááRenamσ doe≤ no⌠ integratσ to∩ wel∞ witΦ SCOPY'≤ methoΣ oµ filσ ì
ááádisplay« á Iµ yo⌡ renamσ THE╬ cop∙ ß file¼ i⌠ retain≤ it≤ áolΣ ì
ááánamσ áiε áthσ destinatioε directory« Yo⌡ shoulΣ árenamσ áafte≥ ì
ááádoinτ al∞ oµ you≥ copying¼ o≥ reloτ thσ fileset«
If an Archived file is renamed, the archive attribute is reset.
(Ditto the Public attribute.)
╠ Logiε ¡ Changσ directories« Yo⌡ ma∙ usσ thσ samσ synta° a≤ oε ì
áááthσ áinitia∞ SCOP┘ invocation« A≤ ß convenience¼ thσ á":ó ái≤ ì
áááoptiona∞ áfollowinτ áß DI╥ reference« Iµ yo⌡ ánamσ áonl∙ áonσ ì
ááádirectory¼ thσ curren⌠ director∙ i≤ assumeΣ t∩ bσ thσ ásource¼ ìèáááanΣ i⌠ i≤ thσ othe≥ director∙ whicΦ changes.
┌ Zi≡ Cop∙ ¡ Cop∙ curren⌠ filσ t∩ ßε alternate directory.
JUM╨ COMMANDS:
╩ áJum≡ ¡ FinΣ thσ nex⌠ matcΦ t∩ thσ masδ entered« Thσ masδ ái≤ ì
automaticall∙ wildcarded.
^J¼ ╚ ReJum≡ ¡ Usσ thσ samσ mask« (^╩ wil∞ no⌠ worδ iµ you≥ TCA╨ ì
define≤ i⌠ a≤ aε arro≈ key« Usσ ╚ (Hop⌐ instead.)
▒ áJum≡ áOnσ á¡ áG∩ t∩ nex⌠ filσ whicΦ áexist≤ áonl∙ áiε ácurren⌠ ì
directory«
2ááJum≡ Tw∩ ¡ G∩ t∩ nex⌠ filσ whicΦ exist≤ iε botΦ directories.
`ááJum≡ TaggeΣ ¡ G∩ t∩ nex⌠ taggeΣ file.
~ááJum≡ UntaggeΣ ¡ G∩ t∩ nex⌠ untaggeΣ file.
GROUP COMMANDS:
G┴ Archivσ ¡ Cop∙ onl∙ taggeΣ file≤ whicΦ d∩ NO╘ havσ thσ archivσ ì
attributσ set¼ theε se⌠ thσ sourcσ archivσ attribute.
GT¼ G╒ Tag/Untaτ ¡ Affect≤ al∞ file≤ froφ thσ curso≥ positioε át∩ ì
enΣ oµ list.
G╦áKomparσ á¡ áD∩ áß bytσ fo≥ ábytσ ácomparisoε áoµ ásourcσ áanΣ ì
ááádestinatioε files¼ repor⌠ thσ resul⌠ oε thσ screeε divide≥ áa≤ ì
ááá"=ó áo≥ "~"« Yo⌡ ma∙ theε retaτ file≤ whicΦ testeΣ áequa∞ áo≥ ì
áááunσqual. ì
OPTIONS:
Thσ á╧ á¡ Option≤ commanΣ display≤ ß lis⌠ oµ flag≤ whicΦ ácaε ábσ ì
toggleΣ yes/n∩ t∩ contro∞ SCOP┘ operations.
áááSe⌠ áCopieΣ Filσ Attribute≤ ¡ Destinatioε filσ attribute≤ áarσ ì
ááácleareΣ unles≤ thi≤ optioε i≤ Yes.
áááUsσ Sourcσ Attribute≤ ¡ Iµ previou≤ optioε i≤ Yes¼ usσ ásourcσ ì
áááattribute≤ oε copy¼ elsσ usσ existinτ destinatioε attributes.
áááArchivσ Destinatioε ¡ UseΣ wheε copyinτ file≤ t∩ ß worδ áarea¼ ì
ááásucΦ áa≤ áß áRA═ disk« Thσ Grou≡ áArchivσ ácommanΣ ácaε átheε ì
áááconvenientl∙ ámovσ áan∙ file≤ yo⌡ altereΣ ábacδ át∩ ápermanen⌠ ì
ááástoragσ wheε yo⌡ arσ done.
áááSho≈ áFilσ áAttribute≤ ¡ SCOP┘ use≤ thσ extendeΣ áTCA╨ áSETAT╥ ìèáááfunctioε t∩ underlinσ filenamσ character≤ t∩ represen⌠ ß áfilσ ì
áááattributσ áset« Thi≤ i≤ unobtrusive« Thσ probleφ i≤ átha⌠ áß ì
ááátaggeΣ ááfilσ ái≤ áhighlighted¼ áanΣ ásomσ áterminal≤ ááchangσ ì
áááhighlightinτ áwheε áunderlininτ ái≤ turneΣ ofµ áanΣ áon« á Thσ ì
áááresul⌠ ái≤ áß cluttereΣ display« Iµ yo⌡ don'⌠ likσ áwha⌠ áyo⌡ ì
ááásee¼ jus⌠ turε attributσ displa∙ off« (VLI┬ doe≤ suppor⌠ áthσ ì
ááácombinatioε "reversσ underline"¼ bu⌠ oε m∙ termina∞ i⌠ doesn'⌠ ì
áááworδ right.)
╓ ¡ View
áááThσ ámaiε viewe≥ command≤ arσ showε highlighteΣ oε thσ ábottoφ ì
áááscreeε áline« á Al∞ viewe≥ function≤ arσ controlleΣ áwitΦ áthσ ì
ááálef⌠ hand« Thesσ are:
ááááááá╞ ¡ Nex⌠ screen
ááááááá┴ ¡ Previou≤ screen
ááááááá╘ ¡ To≡ screen
ááááááá┬ ¡ Bottoφ screen
ááááááá╥ ¡ ReaΣ morσ filσ iµ to∩ biτ fo≥ availablσ buffer
ááááááá╟ ¡ GoT∩ strinτ u≡ t∩ 2░ characters« "_ó i≤ wilΣ char.
ááááááá╚ ¡ Repea⌠ GoT∩ oε samσ string« Samσ a≤ G<cr>
ááááááá╪ ¡ Donσ witΦ thi≤ file« Grou≡ Vie≈ goe≤ oε t∩ nex⌠ file.
ááááááá╙ ¡ Scrol∞ continuousl∙ forwarΣ unti∞ ß ke∙ press
ááááááá─ ¡ Reversσ scroll.
á Command≤ NO╘ showε are:
<sp╛ Nex⌠ lineì
¡ Previou≤ line
<cr╛ Nex⌠ screeε (synonyφ fo≥ Forward)
<tab╛ Ho≡ forwarΣ 1░ lines
^├ Abor⌠ loo≡ (Grou≡ View)
SPECIA╠ DATESTAM╨ COMMANDS
Therσ áarσ áthreσ áway≤ SCOP┘ caε usσ filσ ádatestamp≤ á¡ áeithe≥ ì
separatel∙ áo≥ iε combination║ WilΣ Tagging¼ Grou≡ Copying¼ áanΣ ì
Options« á Therσ arσ alternatσ way≤ t∩ achievσ thσ ásamσ áeffect« ì
Thσ inten⌠ i≤ no⌠ t∩ confuse¼ bu⌠ t∩ makσ i⌠ eas∙ t∩ d∩ wha⌠ áyo⌡ ì
wan⌠ withou⌠ havinτ t∩ reaΣ thi≤ documentatioε ever∙ time!
I. WILD TAG BY DATE COMPARISON
Thσ áZFILE╥ áWilΣ ácommanΣ i≤ extendeΣ át∩ ásuppor⌠ áaε áoptiona∞ ì
Datespeπ áiε áadditioε t∩ thσ filσ mask¼ anΣ threσ áWilΣ áoption≤ ì
looδ áa⌠ thσ destinatioε director∙ beforσ tagginτ ß áfile« á WilΣ ì
command≤ ma∙ bσ repeateΣ t∩ builΣ u≡ ß fileset«
è (W)ilΣ Tag» Untag» Ne≈» 1» 2 MAS╦ DATESPEC
áááSelec⌠ áß áfilese⌠ áfo≥ ß Grou≡ áoperatioε áb∙ ácomparinτ áthσ ì
ááádirector∙ át∩ ß Masδ and/o≥ Datespec¼ theε:ì
ááááááá1« (T)aτ al∞ matches
ááááááá2« (U)ntaτ al∞ matches
ááááááá3« á(N)e≈ -Taτ matcΦ onl∙ iµ thσ sourcσ versioε isáNewe≥.
ááááááá4« (1⌐ -Taτ matcΦ iµ i⌠ exist≤ iε ▒ director∙ only.ì
ááááááá5« á(2⌐ -Taτ matcΦ iµ i⌠ exis⌠s iε ▓ directories. ì
ááááááá
ááááááááááá"Newnessó ái≤ ádetermineΣ b∙ ácomparinτ áthσ átw∩ ì
áááááááááááModif∙ date≤ iµ possible« Iµ therσ i≤ n∩ áModif∙ ì
ááááááááááádatσ áfo≥ áonσ oµ thσ files¼ it≤ Creatσ ádatσ ái≤ ì
áááááááááááused« á Iµ áneithe≥ ái≤ valid¼ thσ áfilσ ái≤ áno⌠ ì
ááááááááááátagged« á Thσ commanΣ ha≤ n∩ effec⌠ oε áunstampeΣ ì
ááááááááááádisk≤ áo≥ systems« Notσ tha⌠ onσ áfile'≤ áModif∙ ì
ááááááááááádatσ coulΣ bσ compareΣ t∩ thσ othe≥ file'≤ Creatσ ì
ááááááááááádatσ (iµ i⌠ ha≤ n∩ Modif∙ date.)
áááWilΣ áácommand≤ áasδ áfo≥ áaε áoptiona∞ áMasδ áá(automaticall∙ ì
áááwildcarded⌐ áanΣ áaε áoptiona∞ áDatespec« á Thσ ádatespeπ áái≤ ì
ááácompareΣ át∩ áthσ áModif∙ datσ o≥ -iµ therσ i≤ ánonσ¡ át∩ áthσ ì
áááCreatσ date« Acces≤ datσ i≤ no⌠ used«
áááThσ datespeπ forma⌠ is:
ááááááá [/C]<¼ >¼ o≥ =datσ[ time]
áááááááWhere:
ááááááá /├ Force≤ comparisoε t∩ Creatσ datσ ONLY
ááááááá ╝ ╛ ╜ Mandator∙ datσ signifie≥ (ho≈ t∩ usσ date)
datσ dd.mm.y∙ (an∙ par⌠ omitteΣ ╜ thσ curren⌠ date)
timσ hh:mφ (an∙ par⌠ omitteΣ i≤ ignored)
áááááááWildcarΣ character≤ "?ó o≥ "*ó arσ alloweΣ iε date¼ time.
áááááááExamples:
<1.╣ Select≤ al∞ modifieΣ beforσ ▒ Sep⌠ thi≤ year
╜ Al∞ modifieΣ today
╛.. 13:0░ Al∞ modifieΣ afte≥ 1pφ today
/c=¬ Al∞ createΣ an∙ da∙ thi≤ month
áááNotσ tha⌠ date≤ arσ Europeaε stylσ rathe≥ thaε Americaε ástylσ ì
ááámm/dd/yy« Europeaε synta° i≤ morσ natura∞ herσ wherσ thσ datσ ì
áááresolutioε proceed≤ froφ finσ t∩ coarse« (Thσ datespeπ parse≥ ì
áááwa≤ developeΣ froφ Carsoε Wilson'≤ ZSLI┬ routinσ PARSDS«)
áááSomσ masδ and/o≥ datσ speπ mus⌠ bσ given¼ o≥ thσ WilΣ ácommanΣ ì
ááácancels« Yo⌡ caε usσ ß singlσ "*ó t∩ tes⌠ everything.
áááá WIL─ Examples║
áááááááWN¬
áááááááTaτ áeverythinτ iε thσ sourcσ di≥ newe≥ thaε áaε áexistinτ ìèáááááááfilσ iε thσ destination«
áááááááW2╜
áááááááTaτ al∞ file≤ modifieΣ toda∙ iε thσ sourcσ director∙ whicΦ ì
áááááááals∩ exis⌠ iε thσ destinatioε directory.
áááááááWN.· <▓
áááááááTaτ áal∞ *.Z?┐ file≤ iε thσ sourcσ di≥ olde≥ thaε thσ á2nΣ ì
áááááááoµ thi≤ montΦ whicΦ arσ newe≥ thaε thσ des⌠ versions«
áááááááWT≤ /c>.« 10
áááááááTaτ al∞ S*.¬ createΣ afte≥ 10A═ today.
II. GROUP COPY BY DATE COMPARISON
áááGrou≡ ácommand≤ operatσ oε ß filσ se⌠ whicΦ ha≤ áalread∙ ábeeε ì
ááátaggeΣ ámanuall∙ o≥ b∙ WilΣ selections« Tw∩ ne≈ command≤ áarσ ì
ááámodeleΣ áoε thσ Grou≡ Archivσ commanΣ whicΦ UNTAG╙ an∙ átaggeΣ ì
áááfile≤ áwhicΦ ádon'⌠ mee⌠ ß criterion¼ display≤ áthσ áresultinτ ì
áááfilσ set¼ theε copie≤ them.
áááG┼ ¡ Grou≡ Equatσ
áááááááCop∙ ááal∞ átaggeΣ áfile≤ áwhicΦ ád∩ áno⌠ áexis⌠ áiε ááthσ ì
ááááááádestinatioε ádirectory¼ O╥ whosσ datestam≡ (includinτ áthσ ì
ááááááátime⌐ i≤ differen⌠ froφ thσ targe⌠ filσ datestamp« á Grou≡ ì
áááááááEquatσ i≤ equivalen⌠ t∩ copyinτ ever∙ taggeΣ filσ froφ thσ ì
ááááááásourcσ át∩ áthσ destination¼ bu⌠ i⌠ doe≤ no⌠ áwastσ átimσ ì
ááááááácopyinτ áfile≤ whicΦ arσ presumabl∙ thσ same« (Thσ áfile≤ ì
áááááááma∙ no⌠ actuall∙ B┼ thσ samσ iε thσ casσ oµ ß cop∙ áerror¼ ì
ááááááábaΣ ádisδ sector¼ fault∙ clock¼ etc« Iµ yo⌡ ásuspec⌠ áyo⌡ ì
ááááááácan'⌠ trus⌠ thσ datestamps¼ usσ GC ¡ Grou≡ Copy.⌐
áááááááGrou≡ Equatσ insist≤ tha⌠ botΦ Creatσ anΣ Modif∙ field≤ oµ ì
áááááááthσ datestam≡ bσ identical« Thσ date≤ arσ no⌠ ácheckeΣ ì
áááááááfo≥ validity¼ however« (┴ filσ doe≤ no⌠ _have▀ t∩ havσ áß ì
ááááááávaliΣ ááModif∙ áádate.⌐ á Iµ ábotΦ á file≤ ááhavσ áánul∞ ì
ááááááádatestamps¼ G┼ wil∞ untag«
áááG╬ ¡ Grou≡ New
áááááááCop∙ ááal∞ átaggeΣ áfile≤ áwhicΦ ád∩ áno⌠ áexis⌠ áiε ááthσ ì
ááááááádestination¼ áO╥ whosσ datestam≡ i≤ newe≥ thaε thσ átarge⌠ ì
áááááááfilσ datestamp« Thi≤ commanΣ UPDATE╙ thσ destination.
áááááááIµ áan∙ date≤ aren'⌠ valid¼ theε ß filσ flunk≤ áthi≤ átes⌠ ì
áááááááanΣ i≤ untagged«
ááSummary:
èáááááááGROUP áEQUATE i≤ intendeΣ fo≥ restorinτ ß ádirector∙ áfroφ ì
áááááááolde≥ backu≡ files« GROU╨ NEW i≤ fo≥ updatinτ ß director∙ ì
áááááááwitΦ ánewe≥ áfiles« WIL─ select≤ ß filσ se⌠ b∙ ánamσ áanΣ ì
ááááááádatσ criteriß fo≥ thσ Grou≡ command≤ t∩ ac⌠ on.
III. FIL┼ REPLAC┼ B┘ DAT┼ COMPARISON
The Option List now looks like this:
A. replace by date If Yes, D-F are ignored, else B-C ignored
B. older replace query
C. newer/equal replace query If No query, copy is NOT made.
Use these options if A. is No or the file datestamp is invalid.
D. single replace query
E. group replace query
F. archive replace query
G. ...
áááReplacσ b∙ Datσ ¡ Iµ Yes¼ thσ nex⌠ tw∩ option≤ arσ áoperative« ì
áááIµ No¼ the∙ arσ ignored«
áááOlde≥ Replacσ ¡ Asδ beforσ replacinτ aε olde≥ file.
áááNewer» Equa∞ Replacσ ¡ Asδ beforσ replacinτ ß newe≥ file« Yo⌡ ì
áááusuall∙ áwon'⌠ wan⌠ to« Therefore¼ iµ thi≤ optioε i≤ áse⌠ át∩ ì
áááNO¼ thσ cop∙ doe≤ NO╘ occur.
áááIµ thσ date≤ compareΣ aren'⌠ valid¼ theε datσ replacσ áquerie≤ ì
áááarσ áskippeΣ anΣ fal∞ bacδ oε option≤ ─-F« SCOP┘ áwoulΣ átheε ì
áááworδ likσ ZFILE╥ fo≥ systems/disk≤ withou⌠ datestamps.
********
áááHINT║ á Se⌠ áu≡ SCOPY'≤ quer∙ option≤ t∩ allo≈ yo⌡ át∩ ásafel∙ ì
ááápla∙ witΦ thσ ne≈ datσ selectioε methods« Yo⌡ wil∞ bσ ablσ t∩ ì
áááseσ áoε screeε wha⌠ SCOP┘ intend≤ t∩ do¼ bu⌠ caε bai∞ áou⌠ áa⌠ ì
áááthσ ápromp⌠ ábeforσ anythinτ happens« Thσ easies⌠ wa∙ át∩ ád∩ ì
áááthi≤ i≤ t∩ Asδ Fo≥ Verification« ┴ ^├ a⌠ thσ Y/╬ promp⌠ áwil∞ ì
ááácance∞ thσ command.
********
áááTHANK╙ t∩ Carsoε Wilsoε fo≥ playinτ ß majo≥ supportivσ rolσ iε ì
áááthσ developmen⌠ anΣ testinτ oµ thi≤ program« SCOPY'≤ Datespeπ ì
áááparse≥ i≤ ß modificatioε oµ hi≤ CopyrighteΣ ZSLI┬ code.
END SCOPY.DOC
ogram« SCOPY'≤ Datespeπ áááparse≥ i≤ ß modi