home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2002 March / PCWMAR02.iso / software / turbocad / V4 / tcw.z / mdc.bas < prev    next >
BASIC Source File  |  1997-10-28  |  14KB  |  650 lines

  1. 'Multiple Drawing Converter
  2. '
  3. '******************************************************************
  4. '                                                                                     
  5. '                      TurboCAD for Windows                      
  6. '                   Copyright (c) 1993 - 1996                    
  7. '             International Microcomputer Software, Inc.        
  8. '                            (IMSI)                              
  9. '                      All rights reserved.                     
  10. '                                                               
  11. '******************************************************************
  12. '
  13. ' Filename: MDC.BAS 
  14. '
  15. ' Author:    Pat Garner, Natalia Karaseva (updated to version 4.0 interface)
  16. '
  17. ' Date:        1/8/97, 09/30/97
  18. '
  19. ' Scriptname:    Multiple Drawing Converter
  20. '
  21. ' Description:    Script asks for a directory and filetype
  22. '                sufix, and then creates a list of files
  23. '                of the specified filetype from the specified
  24. '                directory and then attempts to sequentially 
  25. '                load, save, and close all files in the list.
  26. '                You also have the option to print files both
  27. '                before and after conversion as well as exit
  28. '                the application upon script completion.
  29. '
  30. '
  31. ' TurboCAD (TCADAPI) Functions used in this script:
  32. '    
  33. '    - TCWAppExit
  34. '    - TCWLastErrorGet
  35. '    - TCWDrawingNew
  36. '    - TCWDrawingOpen
  37. '    - TCWDrawingClose
  38. '    - TCWDrawingSaveAs
  39. '    - TCWDrawingPrint
  40. '
  41. '
  42. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  43.  
  44.  
  45.  
  46.  
  47. ''Script Global Access Variables'''''''''''''''''''''''''''''''
  48. '
  49. Dim dir                    As String
  50. Dim ext                    As String
  51. '
  52. Dim newdir                As String
  53. Dim newext                As String
  54. Dim FilStr                As String
  55. Dim OldPath                As String
  56. Dim NewPath                As String
  57. Dim CurPath                As String
  58. '
  59. Dim Printd                As Integer
  60. Dim BAB                    As Integer
  61. Dim q                    As Integer
  62. '
  63. Dim ExitApp                As Integer
  64. '
  65. Dim fh                                                                      As Long
  66. Dim subdir                As String
  67. Dim fileBatname            As String
  68. Dim fileListname            As String
  69. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  70.  
  71.  
  72.  
  73.  
  74. ''Script Global Constants''''''''''''''''''''''''''''''''''''''
  75. '
  76. '
  77. Global Const BEFORE        = 0
  78. Global Const AFTER         = 1
  79. Global Const BOTH        = 2
  80. '
  81. Global Const NO            = 0
  82. Global Const YES        = 1
  83. '
  84. '
  85. ' Set to 1 to exit after UI dialog, or 2 to exit after
  86. '  one iteration of file loop 
  87. '
  88. Global Const DEBUG_MODE            = 0
  89. '
  90. '
  91. ' * Set this value to 0 to show print dialog in file loop 
  92. '
  93. Global Const SHOW_PRINT_DIALOG    = 1 
  94. '
  95. '                                    
  96. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  97.  
  98.  
  99.  
  100.  
  101. ''SUBROUTINE: MAIN'''''''''''''''''''''''''''''''''''''''''''''
  102. '
  103. ' * Parameters: None
  104. ' * 
  105. ' *
  106. ' * Return Value: None
  107. ' * 
  108. ' *
  109. ' * Description:
  110. ' *
  111. ' *        Main is the conductor of the program
  112. ' *         and like a music conductor, tells
  113. ' *         the other parts of the program when
  114. ' *         it's time to do their thing.
  115. ' *
  116. ' *
  117. Sub main()
  118.     
  119.  
  120.     ' * File manipulation variable declarations 
  121.     Dim pos            As Integer
  122.     Dim fh1            As Integer
  123.     Dim filename            As String
  124.     Dim newfilename            As String
  125.     Dim ertxt                        As String
  126.     Dim newfilenameplusdir                    As String
  127.     Dim filenameplusdir        As String 
  128. Dim Dgdef,Title,Resp
  129.     
  130.     UIDialog
  131.     
  132. pos=len(dir)
  133. if (pos>3) Then
  134. ertxt=Right$(dir,1)
  135. if ertxt="\" Then dir=Left$(dir,pos-1)
  136. else
  137. MsgBox "Must be more then 3 symbols in Directory Name!"
  138. Stop
  139. end if
  140. pos=len(newdir)
  141. if (pos>3) Then
  142. ertxt=Right$(newdir,1)
  143. if ertxt="\" Then newdir=Left$(newdir,pos-1)
  144. else
  145. MsgBox "Must be more then 3 symbols in Directory Name!"
  146. Stop
  147. end if
  148.  
  149.  
  150. CurPath=CurDir$()
  151. OldPath=dir
  152.  
  153. ChDir OldPath
  154. if (OldPath<>CurDir$()) Then
  155. MsgBox "Source directory not found"
  156. ChDir CurPath
  157. Stop
  158. End If
  159.  
  160. NewPath=newdir
  161. ChDir NewPath
  162.  
  163. if (NewPath<>CurDir$()) Then
  164.  CrDialog(NewPath)
  165. End If
  166.  
  167. ChDir NewPath
  168. if (NewPath<>CurDir$()) Then
  169. result=MsgBox( "Rename target directory,please."+Chr(10)+"        Cannot create it",0, "Multiple Drawing Converter")
  170. Stop
  171. End If
  172.  
  173. ChDir OldPath
  174. FileBatName="filelist.bat"
  175. FileListName= "Filelist.txt"
  176.  
  177.     ' * Create a batch file that will compile our file list for us 
  178.           open FileBatName for output as #1
  179.  
  180.         print # 1, "@echo off"
  181.         print # 1,  "dir /b "  & "*." & ext & " >" & FileListName
  182.  
  183.     close  #1
  184.  
  185.  
  186.     ' * Run batch file to create the file list 
  187.                    Shell FileBatName, 2
  188.  
  189.  
  190.  
  191.  
  192. if (dir=newdir) and (ext=newext) Then 
  193.     ExitScript
  194. Stop
  195. end If
  196.     'Pause for a second or three
  197.     for i#=0 To 1000000
  198.     next i
  199.  
  200.  
  201.  
  202.                      ' * Open our filelist file for reading 
  203.                      open FileListName for input as #1
  204.  
  205.         ' * Start the file loop and keep iterating until 
  206.         ' *  you've reached the end of the file. 
  207.  
  208. q=0
  209. if (EOF(1)) then
  210. MsgBox "Files no found"
  211. close #1
  212.     RemoveExternalFiles
  213. Stop
  214. end if
  215.  
  216.  
  217.         do while ( not EOF(1)) and (q=0)
  218.  
  219. while (OldPath<>CurDir$()) 
  220. ChDir OldPath
  221. wend 
  222.             ' * Read in a file name 
  223.             line input #1, filename
  224.  
  225.  
  226.             ' * Find out where the extension starts in the filename 
  227.                                   pos = Len(filename)-1
  228.                                                                   
  229.             ' * Append the filename onto the end of the 
  230.             ' *  directory we wish to load files from. 
  231.             filenameplusdir =  Left$(filename,pos)
  232.  
  233.  
  234.             ' * Open the current drawing 
  235.  
  236. while (OldPath<>CurDir$()) 
  237. ChDir OldPath
  238. wend 
  239.  
  240. fh=TCWDrawingOpen(filenameplusdir)
  241.  
  242. if (fh=0) Then
  243. close #1
  244. result=TCWLastErrorGet(ertxt)
  245. RemoveExternalFiles
  246. MsgBox ertxt
  247. ChDir CurPath
  248. q=1
  249. Stop
  250. End If        
  251.  
  252.  
  253.             ' * If the user answered yes to print, 
  254.             ' *  check to see if the user wishes to 
  255.             ' *  print before conversion... 
  256.             if Printd = YES then
  257.  
  258.                 if BAB = BEFORE OR BAB = BOTH then
  259.  
  260.                     ' * Print the drawing 
  261.                     TCWDrawingPrint SHOW_PRINT_DIALOG ' * NOTE: PrintDialog contains a value, 
  262.                                                 ' *  which instructs TCWDrawingPrint 
  263.                                                 ' *  to show the print dialog or not. 
  264.                 end if
  265.  
  266.             end if
  267.  
  268.             
  269.             ' * Create new filename containing the 
  270.             ' *  original filename plus the new 
  271.             ' *  extension. 
  272.             newfilename = Left$(filename, pos-3) & newext
  273.  
  274.             
  275.             ' * Append the newfilename onto the 
  276.             ' *  directory the user wishes to save 
  277.             ' *  the converted files to 
  278.             newfilenameplusdir = newdir & "\" & newfilename
  279.  
  280.  
  281.             ' * Save the current drawing with our 
  282.             ' *  new filename to the directory 
  283.             ' *  originally specified by the user. 
  284.  FilStr=newfilenameplusdir
  285. while (NewPath<>CurDir$()) 
  286. ChDir NewPath
  287. wend 
  288.  
  289.  fh1=TCWDrawingSaveAs(FilStr,FALSE)
  290.             ' * If the user answered yes to print check to see 
  291.             ' * if the user wishes to print after conversion... 
  292.                                   if Printd = YES then
  293.             
  294.                 if BAB = AFTER OR BAB = BOTH then
  295.             
  296.                     ' * Print the drawing 
  297.                     TCWDrawingPrint SHOW_PRINT_DIALOG ' * NOTE: PrinDialog contains a value, 
  298.                                                 ' *  which instructs TCWDrawingPrint 
  299.                                                 ' *  to show the print dialog or not. 
  300.                 end if
  301.  
  302.             end if
  303.  
  304.  
  305.             ' * Close the currently open drawing 
  306.  
  307. while (OldPath<>CurDir$()) 
  308. ChDir OldPath
  309. wend 
  310.                              TCWDrawingClose(0)
  311.  
  312.  
  313.         
  314.             if DEBUG_MODE = 2 then                    ' * If Debug has been set to 1, 
  315.  
  316.                 MsgBox "DEBUG STOP: File Loop"        ' *  Display a message box telling 
  317.                                                     ' *  us this, and the, ... 
  318.  
  319.                 END                                    ' *  stop script execution before 
  320.                                                     ' *  loop iterates again. 
  321.  
  322.             end if
  323.         loop                ' * Iterate loop 
  324.                                     
  325.     close #1                ' * Close filelist filestream 
  326.     
  327.                  ChDir OldPath
  328.     RemoveExternalFiles
  329.     ExitScript
  330.  
  331. End Sub    
  332. '
  333. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  334.  
  335.  
  336.  
  337.  
  338. ''SUBROUTINE: RemoveExternalFiles''''''''''''''''''''''''''''''
  339. '
  340. ' * Parameters: None
  341. ' * 
  342. ' *
  343. ' * Return Value: None
  344. ' * 
  345. ' *
  346. ' * Description:
  347. ' *
  348. ' *        Removes special files created by this script
  349. ' *         for it's own use.
  350. ' *
  351. ' *
  352. Sub RemoveExternalFiles()
  353.  
  354.  
  355. while (OldPath<>CurDir$()) 
  356. ChDir OldPath
  357. wend 
  358. Kill Filelistname
  359. Kill Filebatname
  360.  
  361. while (CurPath<>CurDir$()) 
  362. ChDir CurPath
  363. wend 
  364.  
  365.  
  366.  
  367. End Sub
  368.  
  369. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  370.  
  371. ''SUBROUTINE: ExitScript'''''''''''''''''''''''''''''''''''''''
  372. '
  373. ' * Parameters: None
  374. ' * 
  375. ' *
  376. ' * Return Value: None
  377. ' * 
  378. ' *
  379. ' * Description:
  380. ' *
  381. ' *        Exit TurboCAD upon completion
  382. ' *         of script if user turned option
  383. ' *         from UI dialog.
  384. ' * 
  385. ' *
  386.  
  387. Sub ExitScript ()
  388.  
  389.     ' * If the user elected to exit the app after script completion, ... 
  390.     if ExitApp = YES then
  391.  
  392.  
  393.         ' * Display a message box telling us this ... *
  394.         MsgBox "Finished converting files!" & Chr(10) & "Now Exiting Application!"
  395.  
  396.  
  397.         ' * And exit the application. 
  398.         TCWAppExit
  399.  
  400.  
  401.     else
  402.  
  403.  
  404.         ' * Otherwise, let the user know 
  405.         ' *  the script is done with the 
  406.         ' *  file conversion 
  407.         MsgBox "Finished converting files!"
  408.  
  409.  
  410.     end if
  411.  
  412. End Sub
  413. '
  414. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  415.  
  416.  
  417.  
  418. ''SUBROUTINE: CrDir'''''''''''''''''''''''''''''''''''''''
  419. '
  420. ' * Parameters: ByVal dirstr As String  - Name of directory to create
  421. ' * 
  422. ' *
  423. ' * Return Value: None
  424. ' * 
  425. ' *
  426. ' * Description:
  427. ' *
  428. ' *        Target directory creating
  429. ' * 
  430. ' *
  431.  
  432. Sub CrDir (ByVal dirstr As String )
  433.  
  434. Dim w As Integer
  435. Dim id As Integer
  436. Dim p As Integer
  437. Dim Rpos As Integer
  438. Dim Ls As Integer
  439. Dim AStr As String
  440. Dim PStr As String
  441. Dim NStr As String
  442. Dim dir1 As String
  443. Dim a As String
  444.  
  445.  
  446. AStr=dirstr
  447. p=InSTr(1,AStr,"\")
  448. if (p<>0) then
  449. NStr=Left$(AStr,p-1)
  450. dir1=NStr                       'Current directory
  451. ChDir("\")
  452. ChDrive(dir1)
  453. a=CurDir$()
  454. if (dir1<>CurDir$()) Then
  455. NStr=Left$(AStr,p)
  456. ChDir(Nstr)
  457. end if
  458. a=CurDir$()
  459. if (Nstr<>CurDir$()) Then
  460. MsgBox "Cannot create"+Chr(10)+ dir1+Chr(10)+a
  461. ChDir(CurPath)
  462. Stop
  463. end if
  464. end if
  465.  
  466. Ls=len(Astr)
  467. w=0
  468. id=0
  469. while (w=0) 
  470.    Rpos=Ls-p
  471.    PStr=Right$(Astr,RPos)
  472.    p=InSTr(1,PStr,"\")
  473.       NStr=Left$(PStr,p-1)
  474. if id=0 then
  475.       dir1=CurDir$()+NStr
  476. else     
  477.      dir1=CurDir$()+"\"+NStr     
  478. end if
  479. id=id+1
  480.        ChDir(dir1)
  481.        if (dir1<>CurDir$()) Then
  482.               MkDir Nstr
  483.               ChDir(dir1)
  484.               a=CurDir$()
  485.       end if      
  486.      
  487.       Ls=len(Pstr)
  488. if p=0 then
  489.  w=1
  490. end if
  491. wend
  492. End Sub
  493. '
  494. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  495. Sub CrDialog (ByVal DirS As String)
  496.  
  497.     Begin Dialog Crd 40, 80, 100, 100, "Multiple Drawing Converter"
  498.  
  499.         Text        10, 10, 100, 10,    "Target Directory not found."
  500.         Text        10, 20, 100, 10,    "            Create it?"
  501.         OKbutton     5, 50, 40, 12
  502.         CancelButton 55, 50, 40, 12
  503.  
  504.     End Dialog
  505.     
  506.     
  507.     Dim Dlg2 As Crd
  508.  
  509.     button = Dialog(Dlg2)
  510.  
  511.  
  512.     if button = 0 then
  513.                    Stop
  514.                end if               
  515.  
  516. CrDir(DirS)
  517.  
  518. End Sub
  519.  
  520. ''SUBROUTINE: UIDialog''''''''''''''''''''''''''''''''''''''''''
  521. '
  522. ' * Parameters: None
  523. ' * 
  524. ' *
  525. ' * Return Value: None
  526. ' * 
  527. ' *
  528. ' * Description:
  529. ' *
  530. ' *        This is the script's user interface subroutine.
  531. ' *         It's actually a dialog box definition that serves
  532. ' *         as a "template" for later creating a variable of
  533. ' *         of this type and them using the enable function
  534. ' *        'Dialog' to display it and return values.  The  
  535. ' *         dialog definition is done in a manner very similar 
  536. ' *         to creating user defined variables with the type 
  537. ' *         function in basic or the struct function in C.
  538. ' *         By utilizing several of the UI objects available
  539. ' *         you can actually create quite a useful interface 
  540. ' *         for setting script values and options as well as
  541. ' *         guiding the user through script setup with a 
  542. ' *         "wizard" like interface.  
  543. ' *
  544. ' *
  545. Sub UIDialog ()
  546.  
  547. Dim MyList$(11)
  548. MyList(0)="dwg"
  549. MyList(1)="dwf"
  550. MyList(2)="dxf"
  551. MyList(3)="eps"
  552. MyList(4)="fp3"
  553. MyList(5)="mdl"
  554. MyList(6)="plt"
  555. MyList(7)="sat"
  556. MyList(8)="tct"
  557. MyList(9)="tcw"
  558. MyList(10)="tcx"
  559. MyList(11)="wmf"
  560.  
  561.     Begin Dialog FernUI 20, 60, 150, 190, "Multiple Drawing Converter"
  562.  
  563.         Text        10, 10, 130, 10,    "Directory you wish to open from:"
  564.         TextBox        10, 20, 130, 10,    .OpenDir
  565.  
  566.         Text        10, 33, 100, 10,    "Extension of files load:"
  567.         DropListBox    110, 31, 30, 120,    MyList$(), .OpenType
  568.         
  569.         Text        10, 50, 130, 10,    "Directory you wish to save to:"
  570.         TextBox        10, 60, 130, 10,    .SaveDir
  571.         
  572.         Text        10, 73, 100, 10,    "Extention to save to:"
  573.         DropListBox    110, 71, 30, 120,    MyList$(), .SaveType
  574.         
  575.         CheckBox    10, 150, 140, 10,    "Exit TurboCAD upon script completion", .ExitTCW
  576.         
  577.         CheckBox    10, 85, 130, 20,    "Print drawings", .Print
  578.         
  579.         GroupBox     10, 102, 130, 40,    "Print Before conversion, after, or both?", .PrintBeforeAfterOrBoth
  580.  
  581.         OptionGroup .WhenToPrint
  582.  
  583.             OptionButton 20, 112, 30, 8,    "Before",    .Before
  584.             OptionButton 20, 122, 30, 8,    "After",    .After
  585.             OptionButton 20, 132, 30, 8,    "Both",        .Both
  586.  
  587.         
  588.         OKbutton     35, 175, 40, 12
  589.         CancelButton  75, 175, 40, 12
  590.  
  591.     End Dialog
  592.     
  593.     
  594.     Dim Dlg1 As FernUI
  595.  
  596.         Dlg1.OpenDir    = "c:\imsi\tcw40\drawings"
  597.         Dlg1.OpenType    = 9
  598.         
  599.         Dlg1.SaveDir    = "c:\imsi\tcw40\drawings"
  600.         Dlg1.SaveType    = 9
  601.         
  602.         Dlg1.Print        = 0
  603.         Dlg1.ExitTCW    = 0
  604.  
  605.     
  606.     button = Dialog(Dlg1)
  607.  
  608.  
  609.     if button = 0 then
  610.                    Stop
  611.  
  612.         END
  613.  
  614.     elseif button = -1 then
  615.  
  616.         dir        = Dlg1.OpenDir
  617.         ext        = MyList(Dlg1.OpenType)
  618.  
  619.         newdir    = Dlg1.SaveDir
  620.         newext    = MyList(Dlg1.SaveType)
  621.  
  622.         Printd    = Dlg1.Print
  623.         BAB        = Dlg1.WhenToPrint 
  624.         
  625.         ExitApp = Dlg1.ExitTCW
  626.  
  627.         
  628.         if DEBUG_MODE = 1 then
  629.                 
  630.             MsgBox    "dir: "        & dir        & Chr$(10) & _ 
  631.                     "ext: "        & ext        & Chr$(10) & _ 
  632.                     Chr$(10)    & _ 
  633.                     "newdir: "    & newdir    & Chr$(10) & _ 
  634.                     "newext: "    & newext    & Chr$(10) & _ 
  635.                     Chr$(10)    & _ 
  636.                     "Printd: "    & Printd    & Chr$(10) & _ 
  637.                     "BAB: "        & BAB        & Chr$(10) & _ 
  638.                     Chr$(10)    & _ 
  639.                     "ExitApp: " & ExitApp    
  640.  
  641.             END
  642.  
  643.         end if
  644.  
  645.                 
  646.     end if
  647.     
  648. End Sub
  649.