home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / ez-btm11.exe / ROU.BTM < prev    next >
Text File  |  1994-05-16  |  10KB  |  365 lines

  1. @echo off
  2. : ROU.BTM
  3. : Library of useful routines for 4dos
  4. : (no pretensions for anything fabulous)
  5. : Some routines are simply small valuable utilitites, others
  6. : are useful only as models for routines insertable in batches.
  7. :
  8. : Itamar Even-Zohar (itiez@plato.tau.ac.il)
  9. : --------------------------------------
  10. iff "%1" == "" then
  11. if %_row ge 7 cls
  12. echo Syntax is: ROU [option]
  13.  
  14. text
  15.  
  16. Where 'option' is one of the following:
  17.  
  18. drive             extracts drive name from current full path
  19. ready             finds out if specified disk is ready
  20. ramdisk/ram       finds the first non-remote available drive/disk
  21. extract           eliminates sequence of characters from a string
  22. filename |fn      removes extension from specified filename
  23. lines             counts number of lines in specified file
  24. inclusion         checks inclusion of a character in given string
  25. fullday           gives today's completes days' name (SUN --> SUNDAY)
  26. char              reports given character's ASCII number
  27. trail             checks if specified character is a trailing character
  28.                   in given string or variable
  29. row               puts specified message on desired row
  30. eu-date|eu        reorganize date in European form
  31. ansi              checks if ANSI installed
  32. find_date|fd      find date x days ago
  33. name              report computer's "name"
  34. words             reports number of "words" in variable (words %%variable)
  35.  
  36. endtext
  37. quit
  38. endiff
  39.  
  40. goto %1
  41. :------------------------------------------get drive name
  42. :drive
  43. echo Extracts drive from current full path %_cwd
  44. echo Drive is %@SUBSTR[%_cwd,0,2]
  45. echo (The procedure is: %@SUBSTR[%_cwd,0,2])
  46. quit
  47. :-------------------------------find out if disk is ready
  48. :ready
  49. shift
  50. :    @READY[d:]:  Returns "1" if the specified drive is ready;
  51. :    otherwise returns "0".
  52. setlocal
  53. iff %@ready[%1:] eq 1 then ^echo drive %@upper[%1]: is ready
  54. else
  55. gosub up&low
  56. %ech
  57. endiff
  58. endlocal
  59. quit
  60.  
  61. :up&low
  62. iff %1 lt C then
  63. set ech=echo Drive %@upper[%1]: is not ready
  64. else
  65. set ech=Echo Drive %@upper[%1]: does not exist
  66. endiff
  67. return
  68.  
  69. :-------------------------------------does ramdisk exist?
  70. :ramdisk
  71. :ramdrive
  72. :ram
  73. :: (finds the first non-remote available drive/disk)
  74. set work=ZYXWVUTSRQPONMLKJIHGFEDC
  75. set dr=%_lastdisk
  76.  
  77. :ramdloop
  78. set place=%@index[%work,%dr]
  79. if %_4ver lt 5 set n=0
  80. if %_4ver ge 5 set n=1
  81. iff %@removable[%dr] eq %n .and. %@cdrom[%dr] eq 0 .and. %@remote[%dr] eq 0 .and. %@ready[%dr] eq 1 then
  82.   set ramd=%dr
  83.   goto ramdname
  84.  else
  85.   set place=%@eval[%place+1]
  86.   set dr=%@substr[%work,%place,1]
  87. endiff
  88. if %place lt 24 goto ramdloop
  89. :ramdname
  90. if %_batch ge 2 quit
  91. echo Ramdrive is: "%@upper[%ramd]:"
  92. if %_batch lt 2 unset work dr ramd place n
  93. quit
  94. :------------------------eliminate a sequence from a string
  95. :extract
  96. :ext
  97. : How to eliminate a sequence of characters from a string. For instance,
  98. : if you type VAR-UTIL.ZIP, and you wish to retain the name of file only
  99. : (without its extension): This example is only for demonstration, because
  100. : in the particular case of filenames, 4dos provides built-in parsers:
  101. : @filename[%1] and @ext[%1].
  102.  
  103. shift
  104.  
  105. if .%1 == . goto ext-h
  106. setlocal
  107. set string=%@substr[%1,0,%@eval[%@LEN[%1]-%2]]
  108. echo The string without last %2 characters is: %@upper[%string]
  109. endlocal
  110.  
  111. : In the above example, you retain all the characters of a string
  112. : minus the last n characters (".", and three characters for the extension).
  113. : This is done by getting the length of the string minus n:
  114. : %@eval[%@LEN[%1&]-n] is the procedure for that. Once you know the
  115. : length of the desired string, SUBSTR extracts it for you where %1
  116. : denotes the original strings typed by you.
  117. quit
  118. :ext-h
  119. echo This routine eliminates the last n characters from a string
  120. echo (for parsing filenames better use the built-in variable functions
  121. echo @filename[%1] and @ext[%1])
  122. echo.
  123. echo SYNTAX is:
  124. echo ext[ract] string n
  125. quit
  126. :------------------------Counts number of lines in a file
  127. :lines
  128. :ln
  129. : Counts number of lines in a file
  130. :
  131. if %_row ge 22 cls
  132. shift
  133. iff %#==0 then^echo USAGE: LINES filename ^quit^endiff
  134.   iff not exist %1 then^echo %@upper[%1] does not exist^quit^endiff
  135. screen %@eval[%_row+1] 2
  136. echo No. of lines in file %@upper[%1] is --%@eval[%@lines[%1]+1]--
  137.   rem Since @lines treats line No 1 as '0', it is necessary to add '1'
  138.   rem to the sum total.
  139. drawbox %@eval[%_row-2] 0 %@eval[%_row] 70 1 whi on bla
  140. quit
  141. :-----------------------------check inclusion in a string
  142. :inclusion
  143. :inc
  144. rem  A procedure for checking inclusion of a character in a given string
  145.  
  146. shift
  147. iff "%1"=="" .Or. "%2"=="" then ^
  148. echo No character or string specified^
  149. quit
  150. Else
  151. goto seq
  152. endiff
  153.  
  154. :seq
  155. setlocal
  156. set sequence=%2
  157. iff %@index[%sequence,%1] ge 0 then
  158. echo %@upper[%1] is included in the %@index[%sequence,%1] position in %@upper["%sequence"]
  159. quit
  160.  else
  161. echo %@upper[%1] is NOT included in %@upper["%sequence"]
  162.  endiff
  163. quit
  164.  
  165. :-----------------------------------completes days' names
  166. :fullday
  167. :day
  168. @echo off
  169. echo.
  170. setlocal
  171. set today=%@upper[%_DOW]
  172. iff %today==SUN then ^ set today=SUNDAY ^
  173.   elseiff %today==MON then ^ set today=MONDAY^
  174.   elseiff %today==TUE then ^ set today=TUESDAY^
  175.   elseiff %today==WED then ^ set today=WEDNESDAY^
  176.   elseiff %today==THU then ^ set today=THURSDAY^
  177.   elseiff %today==FRI then ^ set today=FRIDAY^
  178.   elseiff %today==SAT then ^ set today=SATURDAY^
  179. endiff
  180. echo Today is %today
  181. endlocal
  182. quit
  183.  
  184. :-------------------------Finding character code (number)
  185. :char
  186. @echo off
  187. shift
  188. rem  Informs about the ASCII number of a character,
  189. rem  distinguishing between "alphabetic" and "non-alphabetic"
  190. rem  characters.
  191. rem  USAGE: CHAR [character]
  192.  
  193. setlocal
  194.  
  195. iff not "%1" == "" then
  196. set k=%1
  197. goto setchar
  198. endiff
  199.  
  200. echo.
  201. inkey Type desired character: %%k
  202. :setchar
  203. set char=%@ascii[%k]
  204. iff %@index[%k,@] eq 0 then
  205. goto extended_key
  206. endiff
  207.  
  208. iff %char ge 65 .and. %char le 90 .OR. %char ge 97 .and. %char le 122 then
  209. echo "%k" is an alphabetic character (ASCII #%char)
  210.   quit
  211. else
  212. echo "%k" is NOT an alphabetic character (ASCII #%char)
  213.   endiff
  214. endlocal
  215. quit
  216. :
  217.  
  218. :extended_key
  219. echo "%k" is an extended key; use this code for evaluation
  220. endlocal
  221. quit
  222.  
  223. :--------------------------------------trailing character
  224. :trail
  225. : Checks if a character is a trailing character
  226. shift
  227. iff "%&" == "" then echo Syntax is: TRAIL string character^
  228. echo To check variables add "%"
  229. echo (for example: TRAIL %variable_string character)
  230. quit
  231. endiff
  232.  
  233. iff "%@substr[%1,0,-1]" == "%2" then
  234. echo "%1" contains a trailing "%2"
  235. else
  236. echo "%1" does not contain a trailing "%2"
  237. endiff
  238. quit
  239. :----------------------------------Putting message on row
  240. :row
  241. : routine to put messages on specified row (line).
  242. shift
  243. setlocal
  244. cls
  245.  
  246. if .%1==. (echo.^echo Syntax: ROU ROW n [text of message]^quit)
  247. set message=%2&
  248. if .%message==. set message=message
  249.  
  250. set rowline=%@eval[%_row+%1]
  251. screen %@eval[%_row+%1] 0
  252. echo The message "%message" is put on row #%rowline
  253.  
  254. : ---------remarks on alternatives:------------
  255. :                       ^........^^^^ shorter texts can come here
  256. : (scrput can be used for 'screen' for tones / colors)
  257. : Instead of the 'echo' procedure, you can use the text-endtext.
  258. : The row number will not work, but for actual programs it's superfluous.)
  259. :  text
  260. :  (here you can put the desired text)
  261. :  endtext
  262. : --------------end of remarks ----------------
  263. endlocal
  264. quit
  265. :-------------------------------------------European date
  266. :eu-date
  267. :eu
  268. :eudate
  269. rem extracting date in the format dd-mm-yy from mm-dd-yy
  270.  
  271. set dd=%_date
  272. set dy=%@substr[%dd,3,2]-%@substr[%dd,0,2]-%@substr[%dd,6,2]
  273. echo Today's date (%_date) in European form is: %dy
  274. quit
  275. :------------------------------------------filename only
  276. :fn
  277. :filename
  278.  
  279. shift
  280.  
  281. if .%1 == . goto fn-h
  282. setlocal
  283.  
  284. set string=%@name[%1]
  285. echo The filename without extension is: %@upper[%string]
  286. endlocal
  287.  
  288. quit
  289. :fn-h
  290.  
  291. echo SYNTAX is:
  292. echo fn string
  293. quit
  294.  
  295. :-----------------------------------------Checks ANSI----
  296. :ansi
  297. :isansi
  298. :chkansi
  299. iff %_ansi eq 0 .or. %_ansi eq no .or. %_ansi eq 2 then
  300. echo No ansi installed
  301. else
  302. echo ANSI installed
  303. quit
  304.  
  305. :-----------------------find date x days back or forwards
  306. :find_date
  307. :fd
  308.  
  309. shift
  310. if .%1=. (set 1=0^goto syntax_fd)
  311.  
  312. set dd=%_date
  313. set xx=%@date[%dd]
  314.     iff %@index[%1,+] eq 0 then
  315.       set zz=%@makedate[%@eval[%xx+%1]]
  316.       set ech=echo The date %1 days will be:
  317.     else
  318.       set zz=%@makedate[%@eval[%xx-%1]]
  319.     set ech=echo The date %1 days ago was:
  320.    endiff
  321. %ech %zz
  322. quit
  323.  
  324. :syntax_fd
  325. text
  326.  SYNTAX:
  327.  fd [n|+n]
  328.  'n' stands for 'number of days'. If no '+' is preceded,
  329.  fd will calculate the number of days BACK.
  330. endtext
  331. quit
  332. :------------------------------------computer's "name"---
  333. :name
  334. iff"%compuname"=="" then
  335.   echo This computer has been given no name
  336.   quit
  337. else
  338.   echo This computer's name is: "%compuname"
  339. endiff
  340. quit
  341. :------------------------------------reports number of "words"
  342. :                               in variable (words %%variable)
  343. :words
  344. :: A procedure for finding out how many items ("words")
  345. :: there are in a string
  346. shift
  347.  
  348. set string=%1
  349.  
  350. set num=0
  351. do forever
  352.   set wo=%@word[%num,%string]
  353.   if "%wo"=="" leave
  354.   set num=%@eval[%num+1]
  355. enddo
  356.  
  357. echo "%String" contains %num items ("words" separated by blanks)
  358. unset string num
  359. quit
  360. :--------------------
  361. :--------------------
  362. : (put new routine here)
  363. :-----------------------------------------End of routines
  364.