home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
EFFO
/
forum5.lzh
/
BRIEFE
/
brief.bethmann
next >
Wrap
Text File
|
1988-06-07
|
9KB
|
202 lines
Konrad Bethmann bbs-nickname konrad Berlin, 25.04.88
Tellstr. 3
1000 Berlin 44
Tel.: 030 / 623 55 90
Liebe Forumsteilnehmer,
von mir kein Programmbeitrag, sondern nur etwas zu 'arc', Fragen und Tips:
<< Wer hat die Sourcen zu arc? Bitte passe den Code an und schicke den >>
<< Code an das Forum ein !ArW >>
'arc' (forum 3 und brief.niesen, brief.tutzauer von forum 4):
Abweichend von der arc.doc, die wohl fuer IBM-PC geschrieben wurde,
muss bei OS-9 der 'arc command letter' als Option, also mit
vorangestelltem '-' eingegeben werden. Beispiel:
arc a my test.dat funktioniert nicht;
arc -a my test.dat funktioniert, falls das file test.dat
existiert.
<< ist nicht mehr notwendig, es kann "-a" als auch "a" gesagt werden !ArW >>
Wildcards beim 'extract' funktionieren, wennn sie in '"' stehen.
Beispiel:
arc -x junk *.txt *.doc funktioniert nicht;
arc -x junk "*.txt" "*.doc" funktioniert.
Das liegt daran, das Wildcards schon von der shell interpretiert
werden. Die aufgerufenen Prozesse bekommen dann von der shell
immer schon eine 'fertige' Liste von Filenamen. Diese Liste erzeugt
die shell aus allen Filenamen, die in der jeweiligen Directory zu den
angegebenen Wildcards passen (zu sehen z.B. mit 'echo *').
Bei 'arc' sind normalerweise die Namen, die extrahiert werden
sollen, in der Directory noch nicht vorhanden;
Daher koennen sie auch nicht in die Liste aufgenommen werden.
Die Wildcards in double quotes (Gaensefuesschen) werden hingegen erst
von 'arc' bearbeitet.
Auch bei mir wird bei 'extract' das File-Datum falsch eingetragen.
Allerdings nicht um 4 Jahre zu frueh, sondern um 80 Jahre zu frueh.
Es wird einfach die Zehnerstelle der Jahreszahl auf Null gesetzt.
Das ist insbesondere fuer files, die von 'make' bearbeitet werden
sollen, sehr stoerend.
<< Das Datum wird jetzt korrekt eingesetzt. !ArW >>
Ein weiterer kleiner Fehler von 'arc' ist mir aufgefallen:
Falls ein File der Laenge 0 archiviert wird, stuerzt 'arc -v'
(verbose listing des Inhalts) mit diesem Archiv ab. Um den
Compressionsfaktor auszurechnen macht arc wohl eine Nulldivision.
<< Leider besteht dieses Fehlverhalten immer noch. !ArW >>
Fragen:
Woran liegt es, dass nur manche Programme in /pipe files erzeugen
koennen, die laenger als 90 byte sind? Insbesondere kann ein nach
/pipe/.. umgelenkter standard output immer nur 90 byte schreiben.
Es wird erst dann weitergeschrieben, wenn ein anderer Prozess dieses
pipe file liest.
Hingegen schreiben z.B. 'save shell em -f=/pipe/test' oder
'copy * -w=/pipe' beliebig lange files nach /pipe. Wie kann man in
C-Programmen, die files nach /pipe schreiben sollen, diese Faehigkeit
von copy oder save erreichen.
<<Die pipe muss explizit vom Programm groesser eroeffnet werden, die>>
<<genauen Parameter kommen von Lukas !ArW>>
<<Die 90 Bytes sind die "default length" des Pipe Buffers. Wenn ein File
mit I$Create eroeffnet wird, besteht die Moeglichkeit, eine sogenannte
"initial allocation size" anzugeben, damit das File moeglichst an einem
Stueck angelegt wird (was von save und copy sinnvollerweise getan wird).
Bei Pipes verwendet nun OS9 diesen Parameter als Groesse fuer den Buffer.
Wie das in C geht, kann ich im Moment nicht sagen (noch kaum C-Erfahrung,
und Manual im Moment ausgeliehen !LZ>>
Wie kann man Module, die man als ein File zusammen geladen hatte,
aus dem Speicher entfernen? Beispiel:
merge program1 program2 >/programs
load -d programs
unlink program2
Danach ist program2 immer noch im Speicher.
In manchen Faellen scheint ein 2-faches unlink auf das erste Modul
des files alle Module, die das file enthielt, zu loeschen. Das
funktioniert bei mir aber nicht bei den vielen Modulen, die ich beim
booten als ein file lade.
<<Wenn man ein File ladet, das mehere Module enthaelt, so wird NUR DAS ERSTE
Modul davon gelinkt (program1 im Beispiel), die anderen (program2) bleiben
zwar vorlaeufig im Speicher, fliegen jedoch bei der naechsten Ueberpruefung
raus (ihr link count ist ja schliesslich 0). So ist das Verschwinden "in
manchen Faellen" zu erklaeren. Auf jeden Fall kann so ein Modul durch
einmliges Unlink entfernt werden. Etwas anders ist es mit Modulen, die
gebootet werden (also die, die im OS9Boot File sind): Die kann man naemlich
UBERHAUPT NICHT mehr entfernen, auch mit 1000mal Unlink nicht. !LZ>>
Gibt es eine Moeglichkeit, bei files, die keine Module sind, die
group/user id zu aendern? Fixmod funktioniert nur bei Modulen.
<<So ein Utility koennte naechstens auf einer Forums-Disk auftauchen>>
Tips:
Auf den kompletten physikalische Inhalt einer Diskette hat man als
Superuser durch Anhaengen eines '@' an den Device-Namen Lesezugriff.
Beispiel: "dump /r0@" oder "count -b /dd@". Leider ist mir Schreiben
so nicht gelungen (Sonst waehre z.B. backup durch "copy /d0@ /d1@"
moeglich).
Um bei Utilities, die z.B. den Inhalt einer Diskette stark veraendern,
einen Schutz vor versehentlichem Aufruf zu haben, kann man den
Namen der Diskette (der beim formatieren eingegeben werden kann), als
Kriterium fuer das Ausfuehren dieser Utility benutzen.
Folgendes Procedurefile fuehrt den Namen der Diskette in /d0 als
Kommando aus:
* chd nach /d0; Namen der Diskette in /d0 als Kommando ausfuehren
chd /d0
free ! grep "\22" ! tr "\22" "\n" ! grep -v "created on" ! shell
Dieser Name kann dann natuerlich selbst der eines Procedurefiles sein.
Zum Sichern der kompletten Ramdisk kann man z.B. folgendes Procedurefile
verwenden:
(echo -r "chd /r0; fsave -b128 -m/r0/backupdates -pvd="; pd) ! shell -np
Wenn man z.B. das erste Procedurefile "execute_d0" und das zweite
"save_ramdisk" nennt, reicht es, eine Diskette, die beim Formatieren
"save_ramdisk" genannt wurde, in das erste Laufwerk zu schieben, und
"execute_d0" aufzurufen. Wenn ein entsprechendes "execute_d1" (am Anfang
chd /d1 anstatt chd /d0) (und ein zweites Laufwerk) existieren, kann
man mit DER SELBEN Diskette in /d1 durch "execute_d1" das Gleiche erreichen.
Arbeitet man normalerweise nicht als Superuser, moechte aber trotzdem
mit dieser Methode privilegierte Programme (wie z.b. fsave) ausfuehren,
kann man "execute_d1" folgendermassen erweitern:
login superuser, topsecret
.... wie oben ....
logout
(Bei einer Zeile
superuser, topsecret, 0.0, /DD/CMDS, /DD, shell -np
oder so aehnlich in /DD/SYS/password)
Fuer "execute_d0" geht das nur, wenn man, wie von Michael Baehr in
brief.bethmann in Forum 2 beschrieben, die Ramdisk zur boot-disk
(auf der login nach SYS/password sucht) gemacht hat.
Ein anderes Beispiel: man hat viele wichtige Programme, die man
gerne zusammen (schnell) laden moechte in ein File loadstuff auf einer
Diskette mit dem Namen "load_the_stuff" ge-'merge't. Hat man nun ein
Procedurefile "load_the_stuff":
load -d loadstuff
geschrieben, reicht:
einschieben der Diskette in /d1;
execute_d1 aufrufen
- fertig.
Um uebrigens die oben beschriebene "save_ramdisk" Diskette beim
booten wieder zum kompletten Wiederherstellen der Ramdisk zu benutzen
muss man sie in /d1 einlegen, und im startup-file nach dem Initialisieren
der Ramdisk die Zeile:
echo ! frestore -b=128 -d=/d1 -s /r0
unterbringen. (Das echo ist noetig, weil frestore ein Return erwartet
als Antwort auf die Frage, ob das erste Volume ge-'mount'et ist.)
Hier noch ein Hinweis, wie man bei Ausfuehren eines
Procedurefiles "tmode nopause" setzen, und nachher den vorherigen
Zustand wieder herstellen kann, unabhaengig davon, ob der "pause"
oder "nopause" war:
(echo -r "tmode -w2 "; tmode -w2 ! tr " " "\n" ! grep pause) >-/pipe/tmode
tmode -w2 nopause
.... eigentliches Procedurefile ....
/pipe/tmode
Zum Schluss moechte ich noch denjenigen, die aus Deutschland ueber
Acustickoppler (oder Modem ?!) bei bbs in Zuerich (s. Forum 4)
regelmaessig mitmachen wollen, raten, bei der Post eine DATEX-P
Teilnahmeberechtigung (NUI) zu beantragen, sofern sie noch keine haben.
Bei regelmaessiger Benutzung ist das wohl sehr viel billiger als
Auslandsferngespraeche. Information gibt es in Fachzeitschriften,
Buechern zum Thema Datenfernuebertragung (DFUE), oder im Telefonladen
der Post.
<<Fuer alle Schweizer: ruft den Telepac-Eingang an zum Ortstarif, von dort>>
<<kommt Ihr auf Kosten der ETH in das KomETH zum OS9-BBS, vom KomETH ist es>>
<<auch moeglich OS9-EFFO zu erreichen. !ArW>>
soviel fuer heute, Konrad.