| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | program ShowDevs;{  Programm       : Devices  - listet angemeldet Devices auf  Sprache        : PCQ-Pascal 1.2b nach einem kleinen Hack von                   mir in MCC-Pascal V2.04  Autor          : Andreas Neumann für Purity  Datum          : 01.03.1992}{  Translated to fpc pascal  24 Mar 2001.  [email protected]}uses exec,amigados;CONST   Device_Types : Array [0..2] OF pchar = (('DEVICE     '),                                                 ('DIRECTORY  '),                                                 ('VOLUME     '));VAR    mydosbase    : pDOSLibrary;    myrootptr    : pRootNode;    myinfoptr    : pDosInfo;    mydeviceptr  : pDeviceNode;    mystr        : pchar;    eingabe      : CHAR;    mystartup    : pFileSysStartupMsg;    myenvec      : pDOSEnvec;    i            : longint;BEGIN WRITELN; WRITELN ('Device-Lister PD © 1992 by Andreas Neumann (NEUDELSoft) für Purity'); mydosbase:= pDOSLibrary(_DosBase); { Man braucht ja die Adresse der DOSLibrary                      } myrootptr:=mydosbase^.dl_Root; myinfoptr:=BADDR(myrootptr^.rn_Info); mydeviceptr:=BADDR(myinfoptr^.di_DevInfo); { Man hangelt sich von Struktur zu Struktur                      } WHILE mydeviceptr<>NIL DO BEGIN  WITH mydeviceptr^ DO  BEGIN   WRITELN;   {mystr:=Address(Integer(BPTRtoAPTR(dn_Name))+1);}   mystr:=pointer(longint(BADDR(dn_Name))+1);   { Trick : dn_Name ist ein BSTR. Dies ist ein BPTR auf ein Feld, das }   {         mit der Anzahl der Stringzeichen beginnt (daher +1) und   }   {         dann die Zeichen enthält.                                 }   WRITELN ('Name        : ',mystr,':');   WRITELN ('Type        : ',Device_Types[dn_Type]);   IF NOT (dn_Lock=0) THEN    WRITELN ('there is a lock on this Device')   ELSE    WRITELN;   WRITELN;   mystartup:=BADDR(dn_Startup);   myenvec:=BADDR(mystartup^.fssm_Environ);   IF (NOT(dn_Startup=0)) AND (dn_Type=DLT_DEVICE) AND (myenvec^.de_SizeBlock>0) THEN   BEGIN    {          es ist ein dateiorientiertes Device !!!             }    {  im Gegensatz hierzu : ein logisches Device wie L: oder S:   }    WRITELN ('More information regarding the Organisation of Devices: ');    WITH myenvec^ DO    BEGIN     WRITELN;     WRITELN ('Size of the sectors        : ',de_SizeBlock*4,' Bytes');     WRITELN ('Number of sectors per Block: ',de_SectorPerBlock);     WRITELN ('Blocks per Track           : ',de_BlocksPerTrack);     WRITELN ('Startcylinder              : ',de_LowCyl);     WRITELN ('Endcylinder                : ',de_HighCyl);     WRITELN ('Surfaces                   : ',de_Surfaces);     i:=(de_HighCyl+1-de_LowCyl)*(de_Surfaces)*         (de_BlocksPerTrack)*(de_SectorPerBlock)*(de_SizeBlock*4);     { Anzahl der Zylinder * Anzahl der Oberflächen * Anzahl der Blöcke        pro Spur * Anzahl der Sektoren pro Block * Größe eines        Blockes * 4                                                     }     WRITELN ('Storage capacity  : ',i,' Bytes    = ',i DIV 1024,' KBytes');    END;    WRITELN;    writeln('The exec unit number is ',mystartup^.fssm_Unit);   END;  END;  WRITELN ('(M)ore oder (S)top ?');  READLN (eingabe);  mydeviceptr:=BADDR(mydeviceptr^.dn_Next);  IF (UpCase(eingabe)='S') THEN mydeviceptr:=NIL; END; WRITELN ('Good Bye. NEUDELSoft wünscht noch viel Spaß mit Amiga und Pascal.');END.
 |