hMENU - PROGRAM DE MENIU PENTRU APLICAȚII HAMOR SOFT
Produsul hMENU este un program de cadru care asigura exploatarea mai comoda a aplicatiilor hMET, gestionarea bazelor de date aferente, lansarea în executie a diverselor programe, precum si a secventelor de comenzi DOS si hMET.A. Operarea programului
Programul poate fi lansat la pornirea sistemului, astfel aplicatiile HAMOR, Soft, precum si celelalte programe folosite devin accesibile direct din meniu. Utilizatorul neinitiat în informatica trebuie sa se familiarizeze doar cu mediul HAMOR Soft, el putând sa-si rezolve toate sarcinile fara sa paraseasca mediul HAMOR Soft. Prin acest program, selectând meniuri, veți putea lansa oricare din aplicațiile de gestiune pe bazele de date existente și veți putea lansa și alte operații necesare, ca intrare în rețea, lista utilizatorilor din rețea, formatare dischete, copiere-ștergere baze de date etc. Modul de operare a programului este asemănător celorlalte programe HAMOR Soft. Toate comenzile, explicațiile și mesajele sunt în limba română. Comenzile din meniurile programului sunt adaptabile după nevoile de utilizare. Informatii privind exploatarea programului, în afara celor prezentate în documentatia de fata se obtin în timpul rularii programului prin tasta <Ctrl F1>. hMENU recunoaște programele de tip extensie (add-on) ca hCONTP, hMARFAU sau altele elaborate de distribuitori și creează automat puncte de meniu pentru lansarea lor. Dacă veți utiliza acest program, nu veți avea nevoie de alte programe de comandă, ca de exemplu Norton Commander. Veți putea să rezolvați problemele pe calculator, fără să mai fiți nevoiți să părăsiți mediul HAMOR Soft. Dacă v-ați familiarizat cu acest mediu, munca pe calculator va deveni substanțial mai ușoară ! Nu veți mai fi nevoiți să învățati comenzi și utilitare dificile pentru lansarea unor aplicații sau executarea unor acțiuni mai frecvente dar complicate (ex.: formatarea unei dischete, copierea/ștergerea unei baze de date, deschiderea unei firme noi, etc.), acestea se pot executa simplu și sigur, operarea fiind similară ca în toate aplicațiile HAMOR. Nu veți fi nevoiți să renunțați nici la programele preferate de Dvs., cu care sunteți deja obișnuiți să lucrați, executarea acestora poate fi lansată din hMENU, iar după terminarea lor se revine tot în hMENU, exact în punctul de unde s-a plecat, de unde puteți porni în continuare lansarea acțiunii următoare. La pornirea calculatorului se lansează programul hMENU și de aici sunt accesibile toate programele și comenzile pe care trebuie să le executați. Opțiunile se afișează fie într-un meniu orizontal, fie într-un meniu vertical ca în figura de mai jos: ----------------------------------------------------------------------------- | Meniu principal | |===========================================================================| |Baze de date|Intretinere baze de date|Utilitare|Ajutor|Terminare | ----------------------------------------------------------------------------- ============================== | Baze de date curente | | Baze de date arhive | | Baza de date de referinta | | -------------------------- | | Baze de date demonstrative | ============================== Folosiți tastele < ← >, < → > pentru selectarea opțiunii curente pe orizontală și < ↓ > sau < ↑ > pentru selectarea opțiunii curente pe verticală. Acceptarea unei opțiuni se face cu tasta <Enter>. Opțiunea selectată poate fi un meniu sau o comandă. Acceptarea unei comenzi înseamnă lansarea sa în execuție. Ecranul de ieșire, produs de o comandă externă poate fi vizualizat prin <F4>. Meniurile realizează gruparea și ierarhizarea opțiunilor pe baza a diverse criterii. Prin acceptarea unui meniu se afișează opțiunile subordonate ale meniului selectat, opțiuni care la rândul lor pot fi meniuri sau comenzi direct executabile. Pentru orientarea mai bună în program, titlul meniurilor parcurse până la opțiunea curentă sunt afișate în fereastra de istoric. Revenirea dintr-un meniu la nivelul superior (anterior) se face cu tasta <Esc>. De exemplu avem în față ecranul din figura anterioară și dorim să lansăm utilitarul hUTIL pentru baza de date de referință: 1. selectăm opțiunea Baza de date de referință și acceptăm cu <Enter>: se afișează aplicațiile admise pentru această bază de date (figura de mai jos), 2. selectăm utilitarul hUTIL și îl lansăm în execuție prin <Enter>. ----------------------------------------------------------------------------- | Meniu principal | ----------------------------------------------------------------------------- ============================================================================= | Baza de date de referinta | |===========================================================================| | HCONT Contabilitate generala si analitica | | HUTIL Utilitar hMET | | | ... ============================================================================= După executarea utilitarului hUTIL se revine exact în punctul de unde a fost lansat. Dacă acum dorim să lansăm aplicația hCONT pentru baza de date de referință, selectăm acest program prin < ↑ > și acceptăm (lansăm în execuție) prin <Enter>. Dacă după executarea programului dorim să lansăm hCONT pentru una dintre bazele de date curente (să presupunem de exemplu pentru EXORT), revenim în meniul principal cu <Esc>, selectăm și acceptăm Baze de date curente, după care baza de date EXORT, și selectăm și lansăm în execuție programul hCONT pentru această bază de date. Comenzile se lansează la fel de ușor, dar este posibil ca înainte de lansarea lor în execuție să mai fie necesară indicarea unor date care determină condițiile de desfășurare ale comenzii. De exemplu, înainte de formatarea unei dischete va trebui să indicați unitatea de disc flexibil în care se află discheta de formatat. Parametrii introduși se validează și în majoritatea cazurilor puteți primi și ajutor prin tasta <F1>. Pentru unele comenzi, înainte de lansarea lor în execuție, se afișează și un mesaj explicativ. ÎNTREȚINERE BAZE DE DATE Este o operație care ușurează gestionarea bazelor de date de pe calculatorul Dvs. Permite copierea și ștergerea bazelor de date de pe calculator și crearea unei baze de date pentru firmă nouă. La lansarea operației se afișează toate bazele de date existente pe calculator; selectarea uneia dintre acestea se face cu tastele direcționale < ↑ > sau < ↓ >, iar operațiile de prelucrare ale bazelor de date se afișează print <F10> sau <Enter>. Operațiile de copiere și ștergere acționează asupra bazei de date selectate. ----------------------------------------------------------------------------- | ======================================================= | |===================| Creare baza de date pentru firma noua |=| | DBF.0 S.C. | Copiere in baza de date cu regim de consultare | | | DEMOC.DEM S.C. | Copiere baza de date | | | DEVROL S.C. | Transformare in baza de date cu regim de consultare | | | DEVROL.01 S.C. | Stergere baza de date | | | DEVROL.00 S.C. ======================================================= | | EXORT S.C. EXORT SRL | | EXORT.01 S.C. EXORT SRL | | | ... ----------------------------------------------------------------------------- Bazele de date existente pe calculator le categorizăm în următoarele tipuri: 1. BAZE DE DATE CURENTE - conțin datele operative ale firmelor aflate în prelucrare zilnică; ele reflectă situația la zi a firmei proprietare. Convenția ca o bază de date să fie curentă este ca numele să fie format din maxim opt caractere, caracterul "." fiind exclus (adică un nume de catalog fără extensie). Ex.: DEVROL, EXORT, ... 2. BAZE DE DATE DE TIP ARHIVĂ - conțin datele firmelor pentru o perioadă anterioară. De exemplu contabilitatea pentru anii precedenți. Vor fi considerate baze de date arhivă cele care au numele format din maxim opt caractere urmate de un punct, după care anul arhivei pe două caractere. Ex.: DEVROL.02, DEVROL.01, ... 3. BAZĂ DE DATE DE REFERINȚĂ - conține date de referință general valabile. Este baza de date care servește ca model la crearea unei firme noi. Această bază de date trebuie să fie ținută la zi cu datele general valabile pentru toate firmele. Astfel, de exemplu, ori de câte ori introduceți un nou cont analitic general valabil, actualizați și această bază de date, ca la următoarea bază de date nou creată modificările să fie preluate. Structura de jurnale, tipurile de documente existente este bine să fie aceleași pentru toate firmele. Vă ajută să reduceți numărul convențiilor de care trebuie să țineți cont ! Regula pentru identificarea unei baze de date de referință este ca numele să fie format din maxim opt caractere, urmate de ".0". Ex.: DBF.0 4. BAZE DE DATE DEMONSTRATIVE - conțin date demonstrative și de test pentru societăți fictive. Prin studierea acestor date puteți să învățați facilitățile programelor. Exemplele din documentație sunt din aceste baze de date. Bazele de date care au un nume format din maxim opt caractere, urmate de ".DEM", sunt considerate baze de date demonstrative. Ex.: DEMOC.DEM La gestionarea bazelor de date (creare și copiere) la alegerea numelui țineți cont de regulile de mai sus privind denumirile. Operațiile de prelucrare ale bazelor de date: - Creare bază de date pentru firmă nouă. După lansare se afișează o fereastră în care se descrie noua bază de date: numele bazei de date, datele societății proprietare a datelor, unitatea de disc și catalogul în care vor fi salvate datele, etc. După completarea ferestrei se creează noua bază de date, conform datelor indicate, prin copierea bazei de date de referință. - Copiere în baza de date cu regim de consultare. În bazele de date cu regim de consultare datele pot fi consultate, însă nu există posibilitatea modificării lor. În general bazele de date de tip arhivă se copiază cu regim de consultare, evitându-se posibilitatea modificării datelor pentru o perioadă închisă. - Copiere bază de date - copiază o bază de date deja existentă. - Transformare în baza de date cu regim de consultare. Transformă o bază de date cu regim de actualizare și consultare într-o bază de date numai cu regim de consultare. În contabilitate se întâmplă frecvent ca anul contabil precedent nu poate fi închis la timp și astfel trebuie să avem o bază de date pentru anul precedent și una pentru anul în curs, modificabile fiecare în parte. În acest caz, baza de date curentă mai întâi se copiază într-o bază de date de tip arhivă, dar cu regim de consultare și actualizare, iar după ce s-a închis anul contabil precedent, baza de date poate fi transformata în bază de date cu regim de consultare. Ex.: DEVROL.01 conține datele pentru anul contabil 2001 deocamdată nefinalizat. În DEVROL se introduc datele pentru anul contabil 2002. În DEVROL.01 se finalizează contabilitatea pentru anul contabil 2001. După închiderea anului contabil 2001 se execută opțiunea Transformare în baza de date cu regim de consultare pentru DEVROL.01. - Transformare în baza de date cu regim de consultare și actualizare. Activează regimul de actualizare și consultare pentru o bază de date. Operația se folosește în cazuri excepționale, în situații când pentru baza de date a fost activat regimul de consultare, dar ulterior necesită modificări. Folosiți această operație numai în cazuri excepționale ! ATENȚIE: Opțiunea nu este accesibilă în baza de date livrată, dar poate fi activată ulterior ! - Ștergere bază de date - șterge complet baza de date din calculator. Bazele de date șterse pot fi restaurate numai pe baza copiei de siguranță. Existența unei copii de siguranță face parte din atribuțiile utilizatorului. Înainte de lansarea acestei comenzi, asigurați-vă că dispuneți de copia de siguranță sau că nu mai aveți nevoie de datele ce urmează să fie șterse !B. Executarea programului
Aplicația hMENU poate lansa în execuție un program. După terminarea acestuia preia din nou controlul, asteptând opțiunile utilizatorului. Înlănțuirea programelor este implementată prin intermediul unor fișiere de comenzi (.BAT) în modul următor: -------- | V | hMENU.BAT | | | | lanseaza in | ---------------> hMENUe.EXE | executie - | | pt. programele lansate | | genereaza hMENUxx.BAT | | si revine in hMENU.BAT | -<------------------- | | lanseaza in lanseaza in executie | ---------------> hMENUxx.BAT ----------------------->PROGRAM | executie SELECTAT | | | revine in hMENU.BAT si se reia ciclul | --------<-------------------------------------------------------- Înlănțuirea programelor: - Programul hMENUe se lansează în execuție din fișierul de comenzi hMENU.BAT. - Pentru aplicația sau comanda DOS/hMET selectată, hMENUe generează fișierul de comenzi hMENUxx.BAT, după care hMENUe se termină și revine în hMENU.BAT. - hMENU.BAT lansează în execuție hMENUxx.BAT generat. Acesta execută aplicația sau comanda DOS/hMET selectată. După terminare se revine în hMENU.bat, care relansează din nou în executie programul hMENUe. - Din hMENUe se poate selecta o nouă aplicație sau comandă ș.a.m.d. Caracterele xx din numele fișierului hMENUxx.BAT reprezintă identificatorul stației de lucru (fixat prin variabila de stare STATION) și realizează evitarea suprapunerilor când programul este executat în rețea. Programul de meniuri propriu-zis, hMENUe.EXE returnează cod de eroare astfel: - 0, se dorește lansarea în execuție a fișierului de comenzi generat hMENUxx.BAT, - 1, se dorește terminarea programului. În funcție de codul de eroare returnat, în fișierul de comenzi hMENU.BAT se poate lua o decizie referitoare la continuarea ciclului sau terminarea programului. Fișierul de comenzi hMENUxx.BAT este generat în catalogul temporar, indicat de poziția "tmp" din catalogul fișierelor (de exemplu TMP). Pentru rulare, programul de meniu hMENUe.EXE are nevoie de un mediu hMET (baza de date tip hMET). Structura bazei de date: - hMENU - hmenu.dbf menu.dbf menu.dbt - LST - <fisiere sistem hMET> aplic.dbf company.dbf files.dbf hmetcol.dbf savehsf.dbf savehsf.dbt Programul hMENUe.EXE identifica bazele de date de tip hMET prin prezența fișierului FILES.DBF. În general baza de date pentru hMENU se instalează lânga alte baze de date de tip hMET cu care se lucrează în mod curent. In acest caz este inutil ca din hMENU sa fie vizibilă și baza de date proprie a programului. Din acest motiv baza de date pentru hMENUe.EXE se instalează cu un nivel mai adânc decât restul bazelor de date. Ex. \HAMOR\DBMENU\DBMENU \HAMOR\DBF ... Forma generală hmenu.bat: echo off c: cd \HAMOR hMENUe DBMENU\DBMENU %1 if errorlevel 1 goto SFIRSIT call tmp\hmenu%STATION%.bat :CICLU c: cd \HAMOR hMENUe DBMENU\DBMENU 2%1 if errorlevel 1 goto SFIRSIT call tmp\hmenu%STATION%.bat goto CICLU :SFIRSIT echo onC. Structura de meniuri și programare
La livrare hMENU conține o structură de meniuri predefinită. La implementare folosiți această structură, deschizând și închizând, modificând poziții după necesități.1. Structura de meniuri
Structura de meniuri poate fi accesată doar dacă programul se lansează cu parametrul $. Modulul de gestionare a structurii de meniuri se activează prin tasta <F8> si este condiționată de parola specială, iar ajutorul prin <Ctrl F2>.. Daca programul a fost lansat cu parametrul $, accesul la fișierul de meniuri este exclusiv, deci poate fi rulat numai de un singur utilizator. În exploatarea curentă programul se lansează fără parametrul $ și poate fi executat simultan de la mai multe stații de lucru. Deci lansarea programului meniu: - hMENU - fără opțiunea de modificare meniu, - hMENU $ - cu opțiunea de modificare meniu. Structura de meniuri reprezintă descrierea în ansamblu a tuturor meniurilor și comenzilor accesibile din programul hMENU. Fiecare poziție din meniuri este identificată univoc prin cod, totodată codul fiind folosit și pentru determinarea ierarhiei în structura de meniuri. Dacă codul A este cuprins în codul B, atunci A este părinte pentru B, iar B este un descendent al lui A. Ex. 1_UTIL și 1_UTIL_2 1_UTIL este părintele lui 1_UTIL_2 1_UTIL_2 este descendentul lui 1_UTIL O poziție din structura de meniuri poate fi de tip meniu sau comandă. Numai un meniu poate avea descendenți. Un meniu poate avea ca descendent un alt meniu. Nivelul maxim de adâncime admis este de 4. Structura de meniuri poate fi formată: - dintr-un singur arbore pornind de la meniul principal, părinte pentru toate pozițiile din structură. Ca meniu principal se admite un meniu cu codul vid. Dacă există un meniu principal, el va fi afișat primul, celelalte ramificându-se conform definițiilor, pornind de la acesta. Forma primului meniu afișat va fi determinată de meniul părinte (meniu orizontal, meniu vertical). Titlul primului meniu va fi cel al meniului principal. - dintr-un număr arbitrar de arbori, neexistând un meniu părinte comun. La lansarea programului se afișează un meniu vertical din care vor face parte toate meniurile din nivelul superior, adică meniurile care definesc un arbore. Primul meniu afișat nu va avea un titlu. Tipuri de meniuri - MENIU ORIZONTAL - la activare, pozițiile subordonate se afișează pe orizontală. Dacă o poziție subordonată este un meniu, la selectare se afișează pe verticală descendenții acestuia. -------------------------------------------------------------------------- | Titlu | |------------------------------------------------------------------------| |Optiunea 1|Optiunea 2|Optiunea 3|Optiunea 4 | -------------------------------------------------------------------------- ================ | Operatia 2_1 | | Operatia 2_2 | | Operatia 2_3 | ================ - MENIU VERTICAL - la activare, pozițiile subordonate se afișează pe verticală. - MENIU BAZE DE DATE LINIARE - afișează bazele de date de tip hMET dintr-un catalog (cele care conțin fișierul FILES.DBF). Bazele de date sunt afișate în ordinea alfabetică a extensiilor lor. Prin selectarea și acceptarea uneia dintre bazele de date, se afișează aplicațiile executabile pentru aceea bază de date. Pentru ordinea de afișare a aplicațiilor vezi meniul de aplicații. Pentru împărțirea bazelor de date existente în grupe, pot fi stabilite reguli de filtrare prin definiri de nume generice. În nume generice caracterul "*" înlocuiește un șir de caractere oarecare, "?" un caracter oarecare, "#" orice caracter în afară de spațiu. Ex. de nume generice: C:\HAMOR\*.* - toate BD din catalogul HAMOR, C:\HAMOR\SAL* - toate BD din catalogul HAMOR care încep cu SAL, C:\HAMOR\*.## - toate BD din catalogul HAMOR care au extensia formată din două caractere, Numele generic se introduce în calea de acces pentru bazele de date. Exemple de nume generice pentru toate bazele de date din catalogul C:\HAMOR: - C:\HAMOR\ - C:\HAMOR\*.* În meniu vor fi afișate doar bazele de date care se încadrează în definiția generală. - MENIU BAZE DE DATE IERARHICE - afișează toată ierarhia pornind de la o bază de date părinte. Baza de date A este părinte pentru B dacă din B se importă date în A. Bazele de date subordonate sunt depistate automat la lansarea meniului și se afișează decalate pe nivele. Ex.: CENTRAL este o bază de date în care se importă date din SECT_A, SECT_B și SECT_C. Pentru un meniu ierarhic pornind de la C:\HAMOR\CENTRAL se afișează: CENTRAL - S.C. CENTRAL S.A. - SECT_A - Secția A - SECT_B - Secția B - SECT_C - Secția C - MENIU DE APLICAȚII - afișează aplicațiile accesibile pentru o bază de date de tip hMET. Oricare aplicație poate fi lansată prin selectare și acceptare. Ordinea de afișare a aplicațiilor poate fi: - alfabetică, - determinată de administratorul de sistem, pe baza câmpului ORD din fișierul de aplicații. Câmpul ORD este opțional; dacă există, va determina ordinea de afișare a aplicațiilor. Mai multe versiuni ale aceluiași program, programe cu coduri identice: - de multe ori există baze de date organizate în același catalog pentru care se lansează versiuni diferite ale aceluiași program. Ex.: DBF, DBF.93. Pentru DBF se lansează hCONT.EXE (V3), pentru DBF.93 se lansează hCONT1.EXE (V1) În acest caz, în fișierul aplicații din baza de date DBF.93 se modifică numele DOS al programului de contabilitate în hCONT1. Există și baze de date pentru care se lansează aplicații diferite, dar care au coduri identice (ex.: hCONT și hCONTP, hMARFA și hMARFAU). În această situație, pentru baza de date se definește o nouă aplicație cu numele DOS a programului secund. Deci, de exemplu în aplicații vor fi definite HCONT și HCONTP cu același cod. Meniurile pot fi cu expandare ulterioară sau imediată. - expandare ulterioară - accesul la o poziție subordonată se face în doi pași: mai întâi meniul, după care poziția subordonată, - expandare imediată - nu se afișează meniul ci direct descendenții săi de nivel unu. Meniurile orizontale și verticale nu admit opțiunea de expandare imediată. - COMENZI DOS - execută o secvență de comenzi DOS. Practic are același efect ca și cum s-ar lansa în execuție un fișier .BAT de la consolă. În comenzi pot fi referiți 4 parametri externi prin 1%, 2%, 3% și 4%. Parametrii actuali sunt introduși de către utilizator înainte de lansarea în execuție a comenzii. Ce reprezintă fiecare parametru și care sunt valorile admise, se stabilește la definirea comenzii, prin câmpurile "Parametri". Nu se cere introducerea unui parametru pentru care nu s-a definit un nume (câmpul "Parametru" nu este completat). Acești parametri rămân neinițializați. Înainte de lansarea comenzii este posibilă afișarea unui text explicativ, referitor la acțiunea intreprinsă. Textul explicativ se stabilește la definirea comenzii prin câmpurile "Explicații". - COMENZI hMET - execută o secvență de funcții CLIPPER, hMET și hMENU. Funcțiile se introduc direct în fereastra "Comenzi hMET". Sintaxa generală este descrisă la secțiunea Limbaj de scripting hMET2. Funcțiile pot fi introduse pe mai multe rânduri, continuarea în rândul următor fiind indicată prin semnul ";" în ultima coloană. Textele de comentarii trebuie să înceapă cu "//". La salvare, secvențele de comenzi hMET nu sunt validate din punct de vedere sintactic. La executare, liniile care conțin erori de sintaxă sunt omise. În cadrul expresiilor pot fi referiți 4 parametri prin variabilele xP_1, xP_2, xP_3 și xP_4 . Parametrii sunt introduși de către utilizator înaintea lansării în execuție a secvenței de comenzi. Vor fi introduși numai parametrii pentru care la descrierea comenzii s-a definit un titlu (câmpul "Parametru" este completat). Parametrii netransmiși vor avea valoarea implicită de "". În cadrul secvențelor de comenzi se admite și definirea de variabile noi. Variabilele noi vor fi vizibile pe durata executării comenzilor. Numele variabilei trebuie să satisfacă convenția valabilă din Clipper referitoare la variabile. Ex.: lExec := .T. La definirea comenzii, în câmpul "Explicații" poate fi indrodus un text explicativ. Înainte de lansarea în execuție a comenzii, textul va fi afișat într-o fereastră de opțiuni. Utilizatorul va avea posibilitatea să lanseze în execuție comanda sau s-o abandoneze.2. Programare
Variabile și funcții accesibile în comenzile hmet, formule de validare inițializare și ajutor.Variabile hMENU
- xM_WPath - catalogul de lucru, - vizibil în formulele de validare, inițializare și ajutor ale secvențelor de comenzi DOS și hMET. - valoare implicită: "" - xP_1, xP_2, xP_3, xP_4 - valorile parametrilor 1,2,3 și 4, - vizibile în comenzi hMET, formule de validare, inițializare și ajutor pentru comenzi DOS și comenzi hMET, - valoare implicită: ""Operatori frecvent folosiți
- $ - test șir înglobat. sir1 $ sir2 - testează dacă șir1 este înglobat în șir2, indiferent de poziția de început. Ex.: "BCD" $ "ABCDE" // ==> .T. "X" $ "ABCDE" // ==> .F. - = - test de egalitate pentru toate tipurile de date. ATENȚIE! la șiruri de caractere: sir1 = sir2 testează dacă șir1 cuprinde șir2 începând cu poziția 1. Ex.: "ABCDE" = "ABC" // ==> .T. "ABCDE" = "BC" // ==> .F. - == - test de identitate. Ex.: "ABCDE" == "ABCDE" // ==> .T. "ABCDE" == "ABC" // ==> .F.Funcții CLIPPER
- IF(lExpr1, xExpr2, xExpr3) - dacă expresia lExpr1 returnează .T. se execută xExpr2; dacă returnează .F. se execută xExpr3. - DATE() - returnează data curentă. - CURDIR(drv) - returnează catalogul curent de pe discul drv. Pentru drv netransmis, returnează catalogul curent de pe discul implicit. - FILE(sFile) - testează dacă sFile există sau nu pe disc. - AT(sir1, sir2) - returnează poziția de start a șirului șir1 din șir2. Dacă șir1 nu este cuprins în șir2, returnează 0. - RAT(sir1, sir2) - returnează poziția de start a ultimei aparențe a șirului șir1 în șir2. Dacă șir1 nu apare în șir2, returnează 0. Ex.: AT("AB", "ABCABCABC") // ==> 7 - LEFT(sSir, nl), RIGHT(sSir, nl) - returnează un subșir de lungimea nl din partea stânga/dreapta a șirului sSir. - SUBSTR(sSir, nl1, nl2) - returnează un subșir de lungimea nl2, începând cu poziția nl1 din șirul sSir. Pentru nl2 netransmis se returnează partea de sfârșit din șirul sSir, începând cu poziția nl1. - ALLTRIM(sSir) - elimină spațiile de la începutul și sfârșitul șirului sSir. - LTRIM(sSir), RTRIM(sSir) - elimină spațiile din stânga, respectiv dreapta șirului sSir. - UPPER(sSir) - transformă în litere mari caracterele din sSir. - LOWER(sSir) - transformă în litere mici caracterele din sSir. - ISALPHA(sSir) - testează dacă sSir începe cu o literă. - ISDIGIT(sSir) - testează dacă sSir începe cu un număr. - STRTRAN(sSir1, sSir2, sSir3, n1, n2) - înlocuiește sSir2 cu sSir3 din șirul sSir1. sSir3 netransmis, sSir2 va fi înlocuit cu "". n1 - prima aparență a șirului sSir2 care va fi înlocuită. n2 - numărul de aparențe ale șirului sSir2 care vor fi înlocuite. Pentru n1, n2 netransmise, se înlocuiesc toate aparențele șirului sSir2. Ex.: STRTRAN("A A A A A", "A", "B", 2, 3) // ==> "A B B B A" STRTRAN("A A A A A", "A", "B") // ==> "B B B B B" - SPACE(nl) - returnează un șir de caractere de lungimea nl format din spații. - VAL(sStr) - convertește în număr șirul de caractere sStr. - SETPOS(nRow, nCol) - poziționează cursorul în linia nRow și coloana nCol - QOUT(xExpr), QQOUT(xExpr) - afișează pe ecran valoarea expresiei xExpr. Înainte de afișare QOUT() trimite și un CR; QQOUT() afișează valoarea expresiei xExpr începând cu poziția curentă. - SAVESCREEN (nTop, nLeft, nBottom, nRight) - salvează imaginea porțiunii de ecran determinat de coordonatele nTop, nLeft, nBottom, nRight și o returnează sub formă de șir de caractere. - RESTSCREEN (nTop, nLeft, nBottom, nRight, sScr) - restaurează imaginea porțiunii de ecran determinat de coordonatele nTop, nLeft, nBottom, nRight pe baza șirului de caractere sScr.Funcții hLIB
- h_Ctod(sDate, sModel) - convertește șirul de caractere sDate într-o dată calendaristică conform modelului sModel. - h_Dtoc(dDate, sModel) - convertește data calendaristică dDate într-un șir de caractere conform modelului sModel. sModel este un șir de caractere în care zz - reprezintă ziua, ll - luna, aa sau aaaa - anul. În hDtoc() l..l - din modelul de mai sus reprezintă luna în limba română. - h_CDow(dDate) - returnează în limba română numele zilei din data calendaristică dDate. - h_CMonth(dDate) - returnează în limba română numele lunii din data calendaristică dDate. - h_PadC (sStr1, ln) - centrează șirul sStr1 într-un șir de caractere de lungimea ln, începutul și sfârșitul șirului rezultat fiind completat cu spații. - h_PadL (sStr1, ln), h_PadR(sStr1, ln) - completează șirul sStr1 cu spații la început, respectiv sfârșit, astfel încât să rezulte un șir de lungimea ln. - h_PadM (sStr1, sStr2, ln) - construiește un șir de lungimea ln care începe cu sStr1 și se termină cu sStr2, partea din mijloc fiind completată cu spații. - h_hList (nTop, nLeft,,sTitle,aList) - afișează o fereastră de ajutor cu o listă de valori. nTop, nLeft - coordonata stânga sus a ferestrei de ajutor. sTitle - titlul ferestrei de ajutor. În parametrul aList se transmit elementele listei, astfel: {{sNume, sVal,,nHotKey},...} sNume - denumirea elementului, sVal - valoarea elementului, nHotKey - codul cheii directe pentru care se selectează elementul respectiv Ex.: h_hList( 10, 50,, "Unitati de disc", ; {{"A:","A",,ASC("a")},{"B:","B",,ASC("b")} - h_PathValid (sPath, nNivel, sMode) - testează dacă sPath reprezintă o cale de acces validă. Dacă sMode = "G", în numele fișierului (ultimul segment din sPath) se admit și caracterele generice "*?". nNivel - parametru de ieșire, reprezintă nivelul de adâncime al sPath, dar numai dacă sPath este o cale absolută. Ex.: h_PathValid ("C:\AAA\BBB", @nivel) // ==> .T., nivel == 2 h_PathValid ("AAA\BBB", @nivel) // ==> .T., nivel == 0 h_PathValid ("C::AA", @nivel) // ==> .F., nivel == 0 - h_TruePath (sPath) - elimină revenirile de forma \.. dintr-o cale de acces. Parametrul sPath trebuie să reprezinte o cale de acces absolută pornind de la rădăcina discului, opțional conținând sau nu și unitatea de disc. Ex.: ? h_TruePath ("C:\AAA\BB\..") // ==> "C:\AAA " - h_AbsPath (sPath) - construiește o cale de acces absolută. Ex.: h_AbsPath("DBF") // ==> \MAN\DBF h_AbsPath("D:DBF") // ==> D:\MAN\DBF - h_AddPath (sSPath, sMPath) - concatenează două căi de acces. Dacă sSPath este o cale relativă (adică NU începe cu o unitate de disc sau semnul "\"), se va considera că este relativă la calea sMPath. Ex.: h_AddPath("DBF", "C:\HAMOR") // ==> "C:\HAMOR\DBF" h_AddPath("C:DBF", "C:\HAMOR") // ==> "C:DBF" - h_FDExist (sFD) - testează existența unui fișier/ catalog. Parametrul sFD conține calea de acces + numele. Valori returnate: "D" - sFD este un catalog; "F" - sFD este un fișier; "" - sFD nu există pe disc. - h_ValFName (sFName) - verifică dacă sFName reprezintă un nume de fișier valid. Nume de fișier valid: - numele format din caractere alfanumerice, numerice sau semnele $%'_@!#()&, - numele format din cel mult 8 caractere care poate fi despărțit printr-un punct de extensie formată din cel mult 3 caractere. - h_FileOnPath (sFile) - caută un fișier în catalogul curent, precum și în cataloagele accesibile prin PATH. Ex.: ? h_FileOnPath ("PKZIP.EXE") // ==> \UTIL\PKZIP.EXE ? h_FileOnPath ("ARJ.EXE") // == "" - fișier negăsit - h_Run (sCmd) - execută o comandă DOS, fără părăsirea programului. - h_Drive (sPath) - returnează unitatea de disc din calea de acces transmisă prin sPath. Ex.: h_Drive("C:\HAMOR\PERSONAL") // ==> "C:" h_Drive("\HAMOR\PERSONAL") // ==> "" - h_FileName (sPath) - returnează numele de fișier din calea de acces validă, transmisă prin sPath. Ex.: h_FileName("C:\HAMOR\PERSONAL\PERSONAL.DBF") // ==> "PERSONAL.DBF" h_FileName("PERSONAL.DBF") // ==> "PERSONAL.DBF" h_FileName() // ==> "" - h_FileExt (sCale) - returnează extensia fișierului dintr-un șir de caractere ce reprezintă o cale de acces validă. Ex.: h_Extension ("C:\HAMOR\PERSONAL\PERSONAL.DBF") // ==> ".DBF" h_Extension ("PERSONAL.DBF") // ==> ".DBF"Funcții hMENU
- menu_File (sCale, sExt) - testează existența unui fișier pe disc. Valoare returnată: .T. - dacă fișierul există; .F. - dacă fișierul nu există - sCale - cale de acces + nume fișier. Extensia din numele de fișier este opțională; dacă nu a fost specificată, extensia implicită va fi cea transmisă prin sExt. Calea de acces nu trebuie să fie absolută, dar trebuie să asigure vizibilitatea fișierului din catalogul curent, - sExt - extensia fișierului. Poate fi NIL, "" pentru fișiere fără extensii. Punctul de la început din sExt nu este obligatoriu ("PRG", ".PRG") Ex.: menu_File ("C:\HAMOR\DOC\PERSONAL", ".DOC") se testează existența fișierului C:\HAMOR\DOC\PERSONAL.DOC menu_File ("C:\HAMOR\PRG\PERSONAL.PRG", "PRG") se testează existența fișierului C:\HAMOR\PRG\PERSONAL.PRG menu_File ("C:\HAMOR\PRG\PERSONAL.NOT", ".PRG") se testează existența fișierului C:\HAMOR\PRG\PERSONAL.NOT - menu_FileMan (nTop, nLeft, nBottom, sPath) - construiește o fereastră de tip director care permite explorarea discului pornind de la calea de acces indicată prin sPath. sPath poate fi: - o cale de acces la un catalog existent - se afișează toate subdirectoarele și fișierele din calea de acces indicată, - o cale de acces la un fișier existent - se afișează toate subdirectoarele și fișierele din catalogul în care este situat fișierul indicat, - o cale de acces urmată de un nume generic de fișiere - se afișează toate subdirectoarele, precum și fișierele care corespund numelui generic de fișier, Caracterele generice sunt cele cunoscute din sistemul DOS: "*" și "?". Ex.: \HAMOR\DBF\*.DBF - se afișează toate subdirectoarele, precum și fișierele cu extensia ".DBF" din catalogul \HAMOR\DBF - o cale de acces inexistentă - se afișează fereastra cu o singură poziție, și anume catalogul fictiv ".." care permite revenirea în nivelul superior. Dacă se revine până la un nivel existent, conținutul ferestrei se actualizează corespunzător. Părăsirea ferestrei poate fi făcută: -, pe un fișier - în bufferul tastaturii se înserează numele complet (cale de acces + nume fișier + extensie) al fișierului selectat, - pe un catalog - în bufferul tastaturii se înserează calea de acces absolută la catalogul selectat, - - revenire fără nici o acțiune. nTop, nLeft, nBottom - coordonatele ferestrei. Dacă nu se transmit, fereastra se poziționează pe mijlocul ecranului. - menu_dbWindow (sPath, aOper) - construiește o fereastră care permite gestionarea bazelor de date de tip hMET din catalogul indicat de sPath. Parametrul aOper conține lista operațiilor admise. Dacă nu este transmis, operațiile implicite vor fi de copiere și de ștergere baze de date. Ex.: menu_dbwindow("C:\HAMOR", ; { {"Copiere arhiva", {|p| menu_copydb(p,"AR") }}, ; {"Stergere arhiva", {|p| menu_deldb (p, "A") }}, ; {"Firma noua", {|| menu_newCo("\HAMOR\DBF0")}}} ) - menu_copydb (sPath, sAttrib) - copiază o bază de date de tip hMET. sPath - cale de acces către baza de date sursă, sAttrib - "A" - copia va fi făcută de tip arhivă. "R" - se execută "recorporarea" fișierelor externe. Numele bazei de date destinație se indică de utilizator printr-un ecran de editare. Se indică doar numele, calea de acces fiind aceeași cu catalogul sursă. Recorporarea se execută astfel: fișierele din afara bazei de date vor fi copiate în catalogul cu numele dedicat _EXTERN. Ex.: Baza de date sursă: \HSALAR\DBF Baza de date destinație: \HSALAR\ARHOCT.97 Cale de acces la fișierul "cont": ..\..\HAMOR\DBF\CONT Fișierul "cont" va fi recorporat în catalogul: \HSALAR\ARHOCT.97\_EXTERN Pentru ca operația de copiere cu opțiunea de arhivare să poată fi executată ATTRIB.EXE trebuie să fie "vizibil" din catalogul de unde a fost lansat hUTIL. Căile de acces din catalogul fișierelor sunt relative la baza de date curentă. Din acest motiv sunt considerate fișiere externe cele pentru care calea de acces începe cu "\", "..\" sau cu o unitate de disc (ex.: C:\HAMOR\ ...). Fișierele directate către unitățile de disc A: și B: nu sunt recorporate. - menu_deldb (sPath, sAttrib) - șterge o bază de date de tip hMET. sPath - calea de acces către baza de date, sAttrib - "A" - șterge doar baze de date de tip arhivă, pentru celelalte afișează mesaj de eroare. Observație: Baze de date de tip arhivă sunt cele pentru care accesul este în regim de consultare pentru toți utilizatorii (fișierul "stat" este cu atributul Read only) - menu_newCo (sPath) - creează o bază de date nouă de tip hMET în care introduce o companie nouă. sPath - reprezintă baza de date de referință. Datele ce descriu noua societate se introduc printr-un ecran de editare și se înscriu automat în fișierul societate din baza de date nou creată. Noua bază de date va primi numele dat de utilizator și va fi creată în același catalog cu baza de date de referință. - menu_deltree (sPath, sMode) - șterge complet arborele indicat prin sPath (catalogul indicat împreună cu cataloagele și fișierele din interior). sPath - poate fi relativ la catalogul curent, sMode - "m" - fără monitorizarea operației. - menu_copytree (sPaths, sPatht, sMode) - copiază arborele indicat prin catalogul sursă sPaths începând cu catalogul destinație sPatht. Dacă sPatht există deja, operația nu se execută. sMode - "m" - fără monitorizarea operației. - menu_dbattrib (sPath, sAttr) - transformă baza de date indicată prin sPath într-o bază de date cu regim de consultare. Parametrul sAttr trebuie să aibă valoarea "+A". Exemple utile
- Definirea unei linii de despărțire în meniul vertical. Opțiunile din meniu pot fi despărțite cu linii, care la execuție emit un semnal de tastă eronată. Pentru implementare se definește o comandă hMET care execută h_BeepErr(). - Definirea unei comenzi care permite părăsirea programului. Se definește o comandă DOS care execută: h_End(1). - Salvarea și restaurarea ecranului în secvențe de comenzi hMET. Dacă în secvențele de comenzi hMET se afișează date pe ecran care trebuie să dispară, la revenirea în program se procedează la salvarea și restaurarea ecranului. sScr := SAVESCREEN(0, 0, MAXROW(), MAXCOL()) ... RESTSCREEN(0, 0, MAXROW(), MAXCOL(), sScr) - Validare nume de fișier cu extensie implicită: h_Valid (menu_File(h_AddPath(xP_1,xM_WPath),".PRG"),"Fisier inexistent !") - numele de fișier introdus de utilizator este încărcat în xP_1, - o cale de acces relativă din xP_1 va fi referită la catalogul de lucru (xM_WPath), - o cale de acces absolută din xP_1 va fi respectată, - dacă pentru fișier nu s-a indicat o extensie, extensia implicită va fi ".PRG". - Expresia de ajutor pentru un parametru în care se așteaptă introducerea unui nume de fișier: menu_FileMan(,,, h_AddPath(xP_1, xM_WPath)) - se afișează fereastra de director conform specificației din xP_1, - o cale de acces relativă din xP_1 va fi referită la catalogul de lucru xM_Wpath, - fereastra de director va fi afișată în mijlocul ecranului.3. Drepturile de acces
Programul hMENUe.EXE nu dispune de mecanisme pentru implementarea drepturilor de acces asupra programelor lansate. Dacă este necesar acestea se implementează prin facilitațile oferite de softul de rețea.