Programmeren in REXX/RexxUtil: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
GuyDC (overleg | bijdragen)
Eerste draft
 
GuyDC (overleg | bijdragen)
Toevoegingen van hele reeks functies
Regel 13:
call MathLoadFuncs
<br>{{Bericht
|bericht=Het is eigenlijk niet nodig dit in elke programma te stekendoen, het is voldoende om deze functiepakketten te laden bij het opstarten van het systeem. Maak een ''start.rex'' programma met deze instructies en plaats het in de startup-folder van windows.
|type=info}}
 
Regel 42:
Bijvoorbeeld:
say SysDriveMap('F:','CDROM') /* R: W: */
==SysFileSystemType - organisatie van een station==
'''SysFileSystemType'''(station)
Geeft de bestandsorganisatie van het opgegeven station (nullstring als het station niet gereed is, of niet bestaat).
say SysFileSystemType('C:') /* Geeft misschien "NTFS" */
 
<!-------------------------------------------------------------------------------------------------------->
=Bestanden beheren=
Voornamelijk voor Windows zijn er een reeks functies voorzien waarmee we bestanden kunnen lijsten, kopiëren, uitvagen en hernoemen. Het gebruik van deze functies is te verkiezen boven het oproepen van het rechtstreeks commando, omdat:
Regel 60 ⟶ 65:
*'''32''' Sharing violation, bestand op andere computer mag alleen gelezen worden;
*'''36''' Sharing buffer overloop;
 
Laten we het gebruik van deze functie nu eens vergelijken met het rechtstreeks oproepen van het "ERASE" command van Windows:
/* Verschil tussen SysFileErase en ERASE commando */
Regel 87 ⟶ 91:
Bijvoorbeeld:
call SysFileCopy "c:\temp\myfile.txt","d:\myfolder"
==SysFileMove - verplaatsen van een bestand==
'''SysFileMove'''(bronbestand,doelpad)
Zelfde opmerkingen als voor '''SysFileCopy'''. Nu wordt het bestand van de oorspronkelijke plaats weggenomen nadat het kopiëren naar de nieuwe plaats is gelukt.
==SysFileTree - bestanden zoeken==
Veruit de meest gebruikte functie om met bestanden te werken. Het is equivalent aan het DIR commando, maar we krijgen het resultaat rechtstreeks terug in een REXX stem&nbsp;!
'''SysFileTree'''(zoekterm,stem.[,opties][,tattribuut][,nattribuut])
De ''zoekterm'' is zoals we met het DIR commando gebruiken, bijvoorbeeld "D:\Fotos\*.jpg". De lijst van de gevonden bestanden wordt in de opgegeven ''stem.'' geplaatst, waarbij de dimensie van de stem, dus het aantal gevonden bestanden, in element 0 wordt gezet.
 
Een combinatie van één of meer van volgende opties kan worden meegegeven:
*'''F''' enkel voor bestanden ('''F'''iles) zoeken;
*'''D''' enkel naar (sub)mappen ('''D'''irectories) zoeken;
*'''B''' zowel bestanden als mappen zoeken ('''B'''oth). Dit is de standaard.
*'''S''' zoek recursief naar '''S'''ubmappen;
*'''T''' geef ook '''T'''ijd en datum van de bestanden in de vorm JJ/MM/DD/UU/MM.
*'''L''' geeft de tijd en datum in '''L'''ang formaat: JJJJ-MM-DD UU:MM:SS. (Nuttig om te triëren)
*'''O''' geeft enkel de naam van het bestand. Zonder deze optie worden standaard de datum, tijd, grootte, attributen en naam van de bestanden teruggegeven.
 
'''Tattribuut''' bepaalt aan welke attributen het bestand moet voldoen.
Het masker is standaard "*****", waarmee alle bestanden worden teruggegeven. Elke positie in het masker kan echter vervangen worden door een '''+''' of '''-''' om aan te duiden dat het bestand het desbetreffend attribuut verplicht wel of niet moet hebben. De volgorde van de attributen zijn '''''ADHRS''''', namelijk '''A'''rchive, '''D'''irectory, '''H'''idden, '''R'''ead-only en '''S'''ystem.
Dus, "*-+**" zou alle verborgen bestanden zoeken zonder de mappen (directories).
 
'''Nattribuut''' bepaalt de nieuwe attributen die aan de bestanden moeten toegekend. Men kan dus met deze functie attributen van bestanden veranderen. De volgorde van de attributen is weer '''''ADHRS'''' en als er een '''+''' gezet wordt dan wordt het attribuut aangezet. Met een '''-''' wordt het afgezet en een '''*''' verandert niets aan het desbetreffend attribuut. Dus, een ''nattribuut'' gelijk aan "-**+*" zal het archiveer attribuut afzetten en de read-only aanzetten voor alle bestanden die aan de zoekopdracht voldoen. Men kan van een bestand op deze manier geen map maken. De nieuwe attributen worden in het resultaat van de functie teruggegeven.
 
Voorbeeld:
call SysFileTree "D:\Fotos\IMG_3*.jpg","bestand.","FO"
do i=1 to bestand.0
say bestand.i
end
geeft misschien iets in de aard van:
D:\Fotos\IMG_3223.jpg
D:\Fotos\IMG_3224.jpg
Met de optie ''L'' erbij zouden we krijgen:
2009-12-13 15:07:24 7547847 A---- D:\Fotos\IMG_3223.jpg
2009-12-13 15:10:12 6845771 A---- D:\Fotos\IMG_3224.jpg
==SysSetFileDateTime - een nieuwe datum en/of tijd aan een bestand toekennen==
'''SysSetFileDateTime'''(bestandsnaam[,nieuwe_datum][,nieuwe_tijd])
Met deze functie kunnen we datum en/of tijd van een bestand veranderen. Het gaat enkel om de "Laatste Modificatie-datum". Indien geen datum noch tijd wordt meegegeven wordt de huidige systeemtijd toegewezen. Indien geen datum maar wel een tijd is opgegeven, dan verandert alleen de tijd. Indien we geen tijd meegeven, dan verandert alleen de datum. We kunnen tevens de datum/tijd van een map aanpassen. Het bestand of map moet toegankelijk zijn voor schrijven en niet in gebruik zijn door een ander proces.
 
De '''nieuwe datum''' moet het volgende formaat hebben: JJJJ-MM-DD, waarbij het jaar groter dan 1800 moet zijn. De '''nieuwe tijd''' moet opgegeven worden in het formaat UU:MM:SS (24-uursformaat).
 
Een returncode -1 geeft aan dat de aanpassing mislukt is. Dit zijn voorbeelden:
Call SysSetFileDateTime "MijnFoto.jpg" /* we zetten de systeemtijd */
Call SysSetFileDateTime "MijnFoto.jpg","1998-12-17" /* Enkel datum wordt veranderd */
Call SysSetFileDateTime "MijnFoto.jpg",,"16:37:21" /* Enkel uur wordt veranderd */
Call SysSetFileDateTime "MijnFoto.jpg","1998-12-17","16:37:21" /* Alles nieuw */
==SysGetFileDateTime - datum en tijd van bestand opvragen=
'''SysGetFileDateTime'''(bestandsnaam[,type])
Met deze functie kunnen - indien het bestandssysteem het toelaat - de verschillende tijden van een bestand (of map) opvragen. Het bestand moet toegankelijk zijn en mag niet in gebruik zijn.
 
De verschillende tijden die we kunnen opvragen zijn:
*'''C'''reate - de creatiedatum;
*'''A'''ccess - de laatste maal dat het bestand geaccedeerd is;
*'''W'''rite - de laatste maal dat er in het bestand is geschreven.
Vergelijk dit met bijvoorbeeld "SysFileTree" waar we enkel de creatiedatum terugkrijgen.
 
==SysFileSearch - in bestand zoeken==
'''SysFileSearch'''(zoekstring,bestand,stem.[,opties])
Deze functie laat toe alle lijnen waar de ''zoekstring'' in voorkomt in het ''bestand'' te zoeken en het resultaat ervan is terug te vinden in de ''stem.'' (waarbij element 0 het aantal gevonden lijnen bevat, dus de dimensie
van de stem bepaalt).
 
Als opties kan men meegeven:
*'''C''' case-sensitieve opzoeking, rekening houden met grootte karakters
*'''N''' lijnnummers teruggeven.
Bijvoorbeeld:
/* Zoeken naar DEVICE in CONFIG.SYS */
call SysFileSearch "DEVICE","C:\CONFIG.SYS","lijn.","N"
do i=1 to lijn.0
say lijn.i
end
geeft misschien volgende uitslag:
1 DEVICE=C:\SB16\DRV\CTSB16.SYS /UNIT=0 /BLASTER=A:240 I:5 D:1 H:5
2 DEVICE=C:\SB16\DRV\CTMMSYS.SYS
4 rem **** DOS SCSI CDROM device drivers ***
5 DEVICE=C:\SCSI\ASPI8DOS.SYS /D
6 DEVICE=C:\SCSI\ASPICD.SYS /D:ASPICD0
13 DEVICE=C:\DOS\SETVER.EXE
==SysSearchPath - zoeken naar een bestand in een pad==
'''SysSearchPath'''(pad,bestandsnaam[,optie])
Deze functie gaat na of het ''bestand'' in het opgegeven ''pad'' aanwezig is. Indien wel, dan wordt de volledige naam van het eerste bestand dat voldoet teruggegeven, en wordt er niet meer verder gezocht. Indien geen bestand is gevonden, dan krijgen we een nullstring terug. Het ''pad'' verwijst hier naar een "omgevingsvariabele" die een lijst van mappen bevat. De typische omgevingsvariabelen hiervoor zijn "PATH" en "DPATH".
 
De ''optie'' geeft aan waar het zoeken moet beginnen:
*'''C''' beginnen van in de huidige map ('''C'''urrent directory) en vervolgens het opgegeven pad. Dit is standaard.
*'''N''' niet in de huidige map beginnen.
Bijvoorbeeld:
/* Zoeken of we toegang hebben tot CMD.EXE via het actuele "PATH" */
gevonden = SysSearchPath("PATH","REXX.EXE")
if gevonden<>"" then say "REXX.EXE is gevonden in" gevonden
else say "REXX.EXE is niet te vinden in PATH"
Hopelijk krijgen we als antwoord:
REXX.EXE is gevonden in C:\Program Files\ooRexx\REXX.EXE
want anders moeten we steeds expliciet het volledig pad opgeven om de REXX interpreter op te starten.
<!------------------------------------------------------------------------------------>
=Mappen beheren=
==SysMkDir - een map aanmaken==
'''SysMkDir'''(nieuwe_map_naam)
Mogelijke returncodes zijn:
*'''0''' alles verliep naar wens;
*'''3''' pad waar map moet gemaakt worden is niet gevonden;
*'''5''' toegang geweigerd;
*'''26''' geen DOS disk;
*'''87''' ongeldige parameter (mapnaam ongeldig);
*'''108''' schijf gelocked;
*'''183''' map bestaat al;
Het MKDIR commando van Windows geeft altijd returncode=0.
==SysRmDir - een map wegnemen==
'''SysRmDir'''(mapnaam)
De returncodes kunnen nu zijn:
*'''0''' alles verliep naar wens;
*'''2''' map niet gevonden;
*'''3''' pad naar map is niet gevonden;
*'''5''' toegang geweigerd;
*'''16''' De map is de huidige map (we kunnen de tak waarop we zitten niet afzagen);
*'''26''' geen DOS disk;
*'''32''' map is niet gedeeld, of veranderingen niet toegestaan;
*'''108''' schijf gelocked;
*'''123''' ongeldige mapnaam;
*'''145''' map is niet leeg;
*'''146''' er is een substitutie op de map;
*'''147''' de map is gelinkt aan een andere;
<!--------------------------------------------------------------------------------------------->
=Werken met stems=
=SysStemCopy - een (deel van een) stem kopiëren=
=SysStemDelete - elementen van een stem wegnemen=
=SysStemInsert - elementen aan een stem toevoegen=
=SysStemSort - een stem sorteren=
<!--------------------------------------------------------------------------------------------->
=RxMessageBox - Een bericht in een kadertje=
'''RxMessageBox'''(text[,titel][,knoppen][,icoontje])
Met deze functie kunnen we op een eenvoudige wijze een popup-schermpje maken waarin we een bericht kunnen tonen. Dit is vooral nuttig indien ons programma niet vanuit de opdrachtprompt is opgeroepen, maar door een link in het startmenu of een icoon op de desktop. Een '''say''' werkt dan niet omdat er geen scherm is waar het te tonen.
 
Naast de ''tekst'' kunnen we ook zorgen voor een ''titel'' en kiezen welke ''knoppen'' en ''icoontje'' moeten voorzien worden.
De mogelijke knoppen zijn:
*'''NONE''' (geen knop voorzien):
*'''OK''' - een knop met de tekst "OK" voorzien. Dit is de standaard;
*'''OKCANCEL''' - twee knoppen, een met "OK" en een met "CANCEL";
*'''RETRYCANCEL''' - de knoppen "RETRY" en "CANCEL";
*'''ABORTRETRYIGNORE''' - drie knoppen: "ABORT", "RETRY" en "IGNORE";
*'''YESNO''' - de knoppen "YES" en "NO";
*'''YESNOCANCEL''' - drie knoppen, "YES", "NO" en "CANCEL";
Een tekst op de knoppen kan niet vertaald worden. Maar er zijn andere mogelijkheden indien OORexx wordt gebruikt. We zullen ze bestuderen in het hoofdstuk [[Programmeren in REXX/OORexx|Een beetje OORexx]].
 
De mogelijke icoontjes zijn:
*'''HAND''' - een handje;
*'''QUESTION''' - een vraagteken;
*'''EXCLAMATION''' - een uitroepteken;
*'''ASTERISK''' - een ster;
*'''INFORMATION''' - een Informatie-icoontje;
*'''STOP''' - een stopteken;
*'''QUERY''' - een vraagteken;
*'''WARNING''' - een waarschuwingsteken;
*'''ERROR''' - een foutteken.
 
De gebruiker krijgt de mogelijkheid te kiezen tussen verschillende toetsen (naargelang de opgegeven parameters). Het gebruik van een bepaalde toets genereert een overeenkomstige returncode:
*'''1''' OK knop;
*'''2''' CANCEL knop (of Esc-toets);
*'''3''' ABORT knop;
*'''4''' RETRY knop;
*'''5''' IGNORE knop;
*'''6''' YES knop;
*'''7''' NO knop;
{{25%}}
{{sub}}
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.