showdevs.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. program ShowDevs;
  2. {
  3. Programm : Devices - listet angemeldet Devices auf
  4. Sprache : PCQ-Pascal 1.2b nach einem kleinen Hack von
  5. mir in MCC-Pascal V2.04
  6. Autor : Andreas Neumann für Purity
  7. Datum : 01.03.1992
  8. }
  9. {
  10. Translated to fpc pascal
  11. 24 Mar 2001.
  12. [email protected]
  13. }
  14. uses exec,amigados;
  15. CONST Device_Types : Array [0..2] OF pchar = (('DEVICE '),
  16. ('DIRECTORY '),
  17. ('VOLUME '));
  18. VAR
  19. mydosbase : pDOSLibrary;
  20. myrootptr : pRootNode;
  21. myinfoptr : pDosInfo;
  22. mydeviceptr : pDeviceNode;
  23. mystr : pchar;
  24. eingabe : CHAR;
  25. mystartup : pFileSysStartupMsg;
  26. myenvec : pDOSEnvec;
  27. i : longint;
  28. BEGIN
  29. WRITELN;
  30. WRITELN ('Device-Lister PD © 1992 by Andreas Neumann (NEUDELSoft) für Purity');
  31. mydosbase:= pDOSLibrary(_DosBase);
  32. { Man braucht ja die Adresse der DOSLibrary }
  33. myrootptr:=mydosbase^.dl_Root;
  34. myinfoptr:=BADDR(myrootptr^.rn_Info);
  35. mydeviceptr:=BADDR(myinfoptr^.di_DevInfo);
  36. { Man hangelt sich von Struktur zu Struktur }
  37. WHILE mydeviceptr<>NIL DO
  38. BEGIN
  39. WITH mydeviceptr^ DO
  40. BEGIN
  41. WRITELN;
  42. {mystr:=Address(Integer(BPTRtoAPTR(dn_Name))+1);}
  43. mystr:=pointer(longint(BADDR(dn_Name))+1);
  44. { Trick : dn_Name ist ein BSTR. Dies ist ein BPTR auf ein Feld, das }
  45. { mit der Anzahl der Stringzeichen beginnt (daher +1) und }
  46. { dann die Zeichen enthält. }
  47. WRITELN ('Name : ',mystr,':');
  48. WRITELN ('Type : ',Device_Types[dn_Type]);
  49. IF NOT (dn_Lock=0) THEN
  50. WRITELN ('there is a lock on this Device')
  51. ELSE
  52. WRITELN;
  53. WRITELN;
  54. mystartup:=BADDR(dn_Startup);
  55. myenvec:=BADDR(mystartup^.fssm_Environ);
  56. IF (NOT(dn_Startup=0)) AND (dn_Type=DLT_DEVICE) AND (myenvec^.de_SizeBlock>0) THEN
  57. BEGIN
  58. { es ist ein dateiorientiertes Device !!! }
  59. { im Gegensatz hierzu : ein logisches Device wie L: oder S: }
  60. WRITELN ('More information regarding the Organisation of Devices: ');
  61. WITH myenvec^ DO
  62. BEGIN
  63. WRITELN;
  64. WRITELN ('Size of the sectors : ',de_SizeBlock*4,' Bytes');
  65. WRITELN ('Number of sectors per Block: ',de_SectorPerBlock);
  66. WRITELN ('Blocks per Track : ',de_BlocksPerTrack);
  67. WRITELN ('Startcylinder : ',de_LowCyl);
  68. WRITELN ('Endcylinder : ',de_HighCyl);
  69. WRITELN ('Surfaces : ',de_Surfaces);
  70. i:=(de_HighCyl+1-de_LowCyl)*(de_Surfaces)*
  71. (de_BlocksPerTrack)*(de_SectorPerBlock)*(de_SizeBlock*4);
  72. { Anzahl der Zylinder * Anzahl der Oberflächen * Anzahl der Blöcke
  73. pro Spur * Anzahl der Sektoren pro Block * Größe eines
  74. Blockes * 4 }
  75. WRITELN ('Storage capacity : ',i,' Bytes = ',i DIV 1024,' KBytes');
  76. END;
  77. WRITELN;
  78. writeln('The exec unit number is ',mystartup^.fssm_Unit);
  79. END;
  80. END;
  81. WRITELN ('(M)ore oder (S)top ?');
  82. READLN (eingabe);
  83. mydeviceptr:=BADDR(mydeviceptr^.dn_Next);
  84. IF (UpCase(eingabe)='S') THEN mydeviceptr:=NIL;
  85. END;
  86. WRITELN ('Good Bye. NEUDELSoft wünscht noch viel Spaß mit Amiga und Pascal.');
  87. END.