.. L ! ! ! ! ! ! ! ! ! ! ! R .pl 72 .he Comenzi CP/M PIP .fo # .pn 30 .uj 1 4.8 Comanda PIP PIP este un program care implementeaza operatiile de baza pentru conversii de suport necesare pentru crearea, listarea, inregis trarea, copierea si concatenarea fisierelor pe disc. Programul PIP se lanseaza in executie prin una din formele: (1) PIP(CR) (2) PIP linie-de-comanda(CR) In ambele cazuri, programul PIP va fi incarcat in zona TPA si se va lansa in executie. In cazul (1) PIP citeste si executa mai multe linii de comanda introduse direct de la consola. PIP semnalizeaza faptul ca asteapta introducerea unei linii de coman da prin tiparirea la consola a prompterului "*". Programul PIP se termina atunci cind se introduce, pe post de linie de comanda, caracterul (CR). Forma (2) a comenzii PIP este echivalenta cu prima, cu exceptia faptului ca PIP preia si executa o singura linie de comanda dupa care actiunea sa se termina. In acest caz, PIP nu mai afiseaza la consola prompterul "*". Formatul unei linii de comanda este: destinatie=sursa-1,sursa-2,...sursa-n(CR) unde: destinatie - este numele unui fisier sau dispozitiv peri feric care va receptiona datele. sursa-1 - reprezinta unul sau mai multe fisiere sau ... dispozitive periferice, care se copiaza de sursa-n la stinga la dreapta in fisierul/dispozitivul destinatie. Atunci cind in linia de comanda se specifica mai multe fisiere sursa (n>1) se presupune ca fiecare din aceste fisiere con tine numai caractere ASCII, sfirsitul lor fiind marcat de un "caracter de sfirsit de fisier standard" (CTRL/Z). Linia de comanda poate contine atit caractere minuscule, cit si majuscule, minusculele fiind automat transformate in majuscule. O linie de comanda poate avea o lungime maxima de 128 caractere (se poate utiliza caracterul CTRL/E pentru a forta un (CR) fizic pentru liniile ce depasesc latimea consolei). Fisierul destinatie si fisierele sursa pot fi definite prin specificatori-individuali precedati optional de numele unitatii de disc. In absenta numelui unitatii de disc, se considera implicit numele discului instalat. Daca intr-o linie de comanda se specifica un singur fisier desti natie si mai multe fisiere sursa, acesta echivaleaza cu o opera tie de concatenare a fisierelor sursa, cu depunerea rezultatului in fisierul destinatie. In conditiile in care fisierul desti natie exista deja pe unitatea de disc specificata sau implicita, acesta este sters. Aparitia unei conditii de eroare inhiba operatia de stergere a fisierului destinatie in cazul in care acesta exista deja. In continuare se vor prezenta citeva exemple de linii de comanda PIP valide. X=Y(CR) - copiaza fisierul cu numele Y intr-un fisier cu numele X pe aceeasi unitate de disc. Fisierul Y ramine neschim bat. X=Y,Z(CR) - concateneaza fisierele cu nume Y si Z si le copiaza intr-un fisier cu numele X pe aceeasi unitate de disc. Fisierele Y si Z ramin neschimbate. X.ASM=Y.ASM,Z.ASM,W.ASM(CR) - creeaza fisierul X.ASM pornind de la concatenarea fisierelor Y, Z si W toate de tip ASM. B:A.U=B:B.V,C.W,D.X(CR) - concateneaza fisierul cu numele B.V de pe unitatea de disc "B" cu fisierele C.W si D.X de pe discul instalat si creeaza un fisier cu numele A.U pe unitatea de disc "B". Comanda PIP accepta linii de comanda prescurtate in vederea conversiei de fisiere intre unitatile de disc. Iata citeva exemple de linii de comanda prescurtate: x:=specificator-multiplu(CR) x:=y:specificator-multiplu(CR) specificator-individual=y:(CR) x:specificator-individual=y:(CR) Prima comanda copiaza toate fisierele de pe discul instalat care satisfac specificatorul-multiplu pe unitatea X (X = A - P). A doua comanda este echivalenta cu prima, cu deosebirea ca unita tea de disc pe care se gasesc fisierele sursa este Y:. A treia comanda este echivalenta cu comanda: specificator-individual=y:specificator-individual(CR) care copiaza un fisier de pe unitatea de disc y: intr-un fisier pe discul instalat. A patra comanda este echivalenta cu a treia cu deosebirea ca este specificata si unitatea de disc pe care se va gasi fisierul destinatie. Trebuie remarcat faptul ca in toate cazurile fisierele sursa si destinatie trebuie sa fie diferite. Daca in comanda apare un specificator-multiplu, PIP listeaza, pe masura ce efectueaza operatiile de copiere, numele tuturor fisierelor transferate. Daca un fisier avind acelasi nume cu fisierul destinatie exista deja, acesta este sters si inlocuit cu fisierul copiat (daca operatia s-a desfasurat corect). Urmatoarele comenzi PIP exemplifica operatiile valide de copiere a fisierelor de pe un disc pe altul: B:=*.COM(CR) - copiaza toate fisierele de pe discul instalat care au extensia COM pe unitatea de disc B: A:=B:ZAP.*(CR) - copiaza toate fisierele de pe unitatea de disc B: care au numele ZAP si orice extensie pe unitatea de disc A: ZAP.ASM=B:(CR) - echivalent cu ZAP.ASM=B:ZAP.ASM B:ZOT.COM=A:(CR) - echivalent cu B:ZOT.COM=A:ZOT.COM B:=A:GAMMA.BAS(CR) - identic cu B:GAMMA.BAS=A:GAMMA.BAS Comanda PIP autorizeaza deasemenea utilizarea in linia de comanda a numelor de periferice fizice si logice acceptate de CP/M. Numele de periferice acceptate sint cele prezentate in cadrul comenzii STAT, precum si o serie de nume de periferice specifice comenzii PIP. Perifericele logice acceptate in cadrul comenzii STAT sint: CON: echipament tip "consola" RDR: echipament tip "cititor" PUN: echipament tip "perforator" LST: echipament tip "lista" .. L ! ! ! ! ! ! ! ! R NOTA .. L ! ! ! ! ! ! ! ! ! ! ! R Utilizarea numelor pentru perifericele fizice trebuie facuta in concordanta cu versiunea de MONITOR existenta in microcalculatorul gazda (vezi si observatiile din comanda STAT). De retinut faptul ca perifericul fizic "BAT:" nu este inclus, deoarece aceasta asignare nu este folosita decit pentru a arata ca unitatile RDR: si LST: trebuie sa fie utilizate pentru functiile de I/E ale consolei. Unitatile CON, PUN, LST si RDR sint toate definite in cadrul componentei BIOS din CP/M si pot fi de asemenea modificate pentru orice configuratie de I/E particulara ("Maping"-ul perifericului fizic curent este definit de IOBYTE; vezi in "Manualul de interfata CP/M" studiul acestei functii). Perifericul destinatie trebuie sa fie capabil sa primeasca date (datele nu pot fi trimise la un cititor de cartele) iar perifericele de intrare trebuie sa fie capabile sa transmita date (de la un periferic de tip LST nu pot fi citite date). Numele perifericelor suplimentare ce pot fi utilizate in comen zile PIP sint: NUL: - trimite 40 de caractere null (caracterul ASCII "00H") la perifericul destinatie. EOF: - trimite un "caracter de sfirsit de fisier standard CP/M" (CTRL/Z) la perifericul destinatie (ca racterul este trimis automat la sfirsitul fiecarui transfer de date ASCII, realizat prin intermediul comenzii PIP). INP: - este o sursa de intrare in comanda PIP speciala ce poate fi inclusa chiar in programul PIP. PIP obtine date de intrare caracter cu caracter ape lind cu CALL locatia 103H, cu reintoarcerea date lor in locatia 109H (bitul de paritate trebuie sa fie zero). OUT: - este un periferic destinatie special ce poate fi inserat chiar in comanda PIP. PIP apeleaza cu CALL locatia 106H cu datele in registrul C pentru fiecare caracter de transmis. De retinut ca loca tiile de la 109H la 1FFH, care apartin imaginii- memorie a programului PIP, nu sint utilizate si ca ele pot fi inlocuite cu rutine speciale utilizind DDT-ul. PRN: - identic cu LST: cu deosebirea ca tine cont de TAB-uri (pozitionate din 8 in 8 coloane) numero teaza liniile, efectueaza salturi la pagina noua dupa fiecare grup de 60 de linii tiparite si face un salt initial la pagina noua. In cadrul comenzilor PIP pot apare atit nume de periferice, cit si nume de fisiere. In toate cazurile, perifericul specificat este citit pina la sfirsitul fisierului (CTRL/Z pentru fisierele ASCII sau sfirsit real de fisier pentru fisierele pe disc non- ASCII). Datele de la fiecare periferic sau fisier sint concate nate de la stinga la dreapta pina ce ultima sursa de date a fost citita. Perifericul sau fisierul de destinatie este scris utili zind datele fisierelor sursa, la sfirsit adaugindu-se, pentru fisierele ASCII, un caracter de sfirsit de fisier (CTRL/Z). De retinut ca daca destinatia este un fisier pe disc, atunci se creeaza intii un fisier temporar (cu extensie $$$) si acest fisier isi schimba numele conform numelui fisierului destinatie numai dupa ce operatia de copiere s-a terminat normal. Fisierele cu extensia COM sint considerate intotdeauna ca fiind fisiere non ASCII. Operatia de copiere poate fi oprita in orice moment prin apasarea unei taste (ex: RUBOUT). PIP va raspunde cu mesajul "ABORTED" pentru a indica intreruperea operatiei. De retinut ca daca o operatie oarecare este oprita sau daca apare o eroare in timpul executiei, PIP suspenda toate comenzile in curs de astep tare in conditiile utilizarii comenzii SUBMIT. .cp 3 Comanda PIP realizeaza o functie speciala daca destinatia este un fisier pe disc de tip HEX si daca sursa este o unitate periferica externa cum ar fi cititorul de banda. In acest caz, programul PIP se asigura ca fisierul sursa contine un fisier in format hexa, cu valori hexazecimale permise si inregistrari de verifi care. Cind este detectata o inregistrare incorecta, PIP tran smite un mesaj de eroare la consola si asteapta o actiune de corectie (se va da banda inapoi cu aproximativ 30 de centimetrii si se va reciti). Daca banda nu poate fi corect citita, se va continua operatia prin tastarea unui caracter (CR), inregistra rile neincluse fiind ulterior inserate cu ED. Daca perifericul sursa este RDR: atunci PIP accepta ca "sfirsitul de fisier" sa fie introdus de la consola (se va tasta CTRL/Z). .cp 5 Exemple: PIP LST:=X.PRN(CR) - copiaza fisierul X.PRN la dispozitivul de tip LST. PIP(CR) - lansarea programului PIP in vederea executiei unor linii de comanda semnalizata prin caracterul "*". CON:=X.ASM,Y.ASM,Z.ASM(CR) - concateneaza trei fisiere de tip ASM si le copiaza la perifericul de tip CON: (CR) - un caracter (CR) incheie executia programului PIP PIP PUN:=NUL:,X.ASM,EOF:,NUL:(CR) - trimite 40 de null-uri la perifericul de tip PUN: apoi copiaza la perifericul PUN: fisierul X.ASM urmat de un sfirsit de fisier (CTRL/Z) si de alte 40 de null-uri. Utilizatorul poate de asemenea specifica unul sau mai multi parametri PIP, introdusi intre paranteze drepte si separati sau nu prin spatii. Fiecare parametru influenteaza operatia de co piere iar lista lor trebuie sa succeada imediat perifericul sau fisierul afectat. In general, fiecare parametru poate fi urmat optional de o valoare zecimala intreaga (cu exceptia parametri lor S si Q). Parametrii valizi care pot apare in cadrul unei comenzi PIP sint urmatorii: .cp 5 B - specifica mod de transfer "bloc". Datele sint transferate in buffer de catre programul PIP, pina ce este receptionat de la perifericul sursa un caracter ASCII "X-OFF" (CTRL/S). Acest parame tru permite transferul datelor de la un periferic de intrare care lucreaza la nivel de bloc (exem plu: banda magnetica, caseta magnetica). Dupa receptia unui caracter "X-OFF", programul PIP goleste bufferele discului si se pregateste sa primeasca alte date de intrare. Cantitatea de date inregistrate in buffer depinde de capacitatea memoriei sistemului gazda (PIP va emite un mesaj de eroare daca este depasita capacitatea buffer- ului). .cp 5 Dn - sterge caracterele care depasesc coloana "n" in transferul datelor de la sursa la destinatie. Acest parametru este utilizat foarte frecvent pentru trunchierea liniilor lungi care sint tri mise la o imprimanta sau consola. E - transmite in ecou la consola toate operatiile de transfer, pe masura ce sint executate. F - filtreaza avansurile de pagina (caracterele FORM- FEED) inserate intr-un fisier. Poate fi utilizat simultan si parametrul P pentru inserarea de ca ractere FORM-FEED. H - transfera date hexa: verifica daca datele supuse transferului sint in format hexa. Caracterele neesentiale care se gasesc intre inregistrari hexa sint sterse in timpul copierii. Consola va fi solicitata pentru realizarea de corectii in cazul aparitiei de erori. I - ignora inregistrarile de tip ":00" in cadrul tran sferului de fisiere in format hexa. Parametrul I semnifica automat si parametrul H. L - transforma majusculele in minuscule. N - adauga un numar de linie la fiecare linie transfe rata in fisierul destinatie. Prima linie se nume roteaza cu 1 si incrementarea se face permanent cu 1. Zerourile nesemnificative sint suprimate, iar numarul de linie este urmat de caracterul ":". Daca se specifica parametrul N2, atunci vor fi incluse si zerourile nesemnificative si, de aseme nea, va fi inserat si un caracter TAB dupa numarul de linie. Caracterul TAB va fi tratat daca se foloseste parametrul T. .cp 2 O - permite transferul de fisiere obiect (non ASCII): sfirsitul normal de fisier CP/M este ignorat. .cp 7 Pn - include salturi la pagina noua dupa fiecare grup de "n" linii (cu un salt de pagina initial). Daca n=1 sau este omis, vor avea loc salturi de pagina dupa fiecare grup de 60 de linii. Daca este utilizat parametrul F, suprimarea caractere lor FORM-FEED se face inainte ca noile salturi de pagina sa fie inserate. .cp 4 Qsir^z - intrerupe operatia de copiere dintr-un fisier sau de la un dispozitiv de intrare, atunci cind este intilnit sirul de caractere "sir" (terminat prin CTRL/Z). .cp 8 Ssir^z - incepe copierea din fisierul sursa sau de la dis pozitivul de intrare atunci cind intilneste sirul de caractere "sir" (terminat prin CTRL/Z). Pa rametrii S si Q pot fi utilizati pentru a copia o portiune particulara a unui fisier (de exemplu o subrutina). Sirul de caractere "sir" este supus intotdeauna operatiei de copiere (indiferent de camanda Q sau S). .. L ! ! ! ! ! ! ! ! R NOTA .. L ! ! ! ! ! ! ! ! ! ! ! R Sirurile de caractere "sir" care urmeaza parametrilor S si Q sint transformate in majuscule de catre componenta CCP daca este utilizata forma (2) de lansare a programului PIP. Forma (1) de lansare a programului PIP nu realizeaza aceasta conversie. (1) PIP(CR) (2) PIP linie-de-comanda(CR) Tn - tine cont, in timpul transferului de la sursa la destinatie, de caracterele TAB (CTRL/I) existen te. Fiecare TAB reprezinta salt in coloana "n". U - transforma in timpul copierii minusculele in ma juscule. V - verifica daca datele au fost copiate corect prin recitirea inregistrarilor (in acest caz destinatia trebuie sa fie un fisier pe disc). Z - anuleaza bitul de paritate la citirea datelor pentru fiecare caracter ASCII. Gn - permite copierea unui/unor fisiere apartinind unui alt utilizator (n) intr-un fisier/fisiere aparti nind utilizatorului curent. .. L ! ! ! ! ! ! ! ! R NOTA .. L ! ! ! ! ! ! ! ! ! ! ! R In general, comanda PIP realizeaza operatii numai asupra fisierelor apartinind utilizato rului curent. W - se aplica atunci cind se doreste sa nu mai apara la consola mesajul: DESTINATION FILE IS R/O, DELETE (Y/N)? si sa se realizeze automat inlocuirea vechiului fisier. .cp 5 In mod normal, daca un fisier destinatie dintr-o comanda PIP exista deja si este protejat la scriere (R/O), la consola apare mesajul: DESTINATION FILE IS R/O, DELETE (Y/N)? .cp 5 si se asteapta optiunea "Y" din partea utilizato rului pentru a-l inlocui. Daca raspunsul este diferit de "Y", apare la consola mesajul: ** NOT DELETED ** .cp 2 si fisierul destinatie ramine nealterat (nu se efectueaza transferul de date). .cp 8 R - permite ca si fisierele care au atributul SYS sa fie luate in consideratie in cadrul unei comenzi PIP (in mod normal, comanda PIP ignora aceste fisiere). Parametrul R semnifica automat si para metrul W. Utilizarea parametrului R face ca, in operatiile de copiere, atributele fisierelor de tip SYS (daca exista) sa se pastreze. Exemple de comenzi PIP valide care utilizeaza parametri in cadrul transferului de date: .uj 0 PIP X.ASM=B:[v](CR) - copiaza fisierul X.ASM de pe unitatea de disc B pe discul instalat si verifica daca datele au fost copiate corect. PIP LPT:=X.ASM[nt8u](CR) - copiaza fisierul X.ASM la imprimanta, numeroteaza fie care linie, tine cont de TAB-uri (din 8 in 8 coloane) transforma minusculele in majuscule. PIP PUN:=X.HEX[i],Y.ZOT[h](CR) - copiaza fisierul X.HEX pe un periferic de tip PUN: ignorind inregistrarile de tip ":00" de sfirsit din cadrul fisierului X.HEX. Continua apoi transferul de date citind fisierul Y.ZOT, care contine inregistrari hexa, incluzind si inregistrarile de tip ":00" pe care le contine fisierul Y.ZOT. .cp 5 PIP X.LIB=Y.ASM[sSUBR1:^Z^QJMP^IL3^Z](CR) - copiaza fisierul Y.ASM in fisierul X.LIB. Copierea incepe cind este detectat sirul "SUBR1:" si se opreste dupa intilnirea sirului "JMP(TAB)L3". .cp 6 PIP PRN:=X.ASM[p50](CR) - copiaza fisierul X.ASM la un periferic de tip LST: numerotind fiecare linie, tinind cont de caracterele TAB (din 8 in 8 coloane) si facind salt la pagina noua dupa fiecare 50 de linii. .cp 3 Parametrul [nt8p60] este parametrul implicit pentru dispozitivul PRN:, iar parametrul [p50] precizat in comanda modifica parametrul implicit [p60]. .cp 8 USER 4(CR) PIP A:=A:*.*[g2](CR) - copiaza toate fisierele de pe discul A:, apartinind utilizatorului 2, tot pe discul A:, dar in zona cores punzatoare utilizatorului curent (in cazul nostru, utilizatorul 4). Pentru a utiliza aceasta comanda este necesar ca pro gramul PIP sa fie inregistrat in zona utilizatorului 4. Acest lucru se realizeaza prin secventa: USER 0 DDT PIP.COM DDT VERS 2.2 NEXT PC 1E00 0100 G0 USER 4 SAVE 30 PIP.COM STAT A:*.* $R/O(CR) PIP A:=B:*.COM[w](CR) - copiaza toate fisierele cu extensie COM de pe discul B:, pe discul A:, suprascriind toate fisierele cu ace lasi nume existente pe A:, indiferent daca erau R/O sau nu. STAT B:ED.COM $SYS(CR) B:ED.COM set to SYS STAT B:ED.COM $R/O(CR) B:ED.COM set to R/O PIP ED.COM=B:[r](CR) - copiaza fisierul ED.COM, de tip SYS si R/O, de pe discul B: pe discul A:, pastrindu-i atributele.