home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / VISUAL_B / CODIGO_2 / REFORM / REFORMAT.FRM (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1993-12-01  |  12.0 KB  |  326 lines

  1. VERSION 2.00
  2. Begin Form Main 
  3.    BackColor       =   &H00FFFFFF&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "Reformat and Unpack Utility"
  6.    ClientHeight    =   2745
  7.    ClientLeft      =   810
  8.    ClientTop       =   2550
  9.    ClientWidth     =   8040
  10.    ControlBox      =   0   'False
  11.    Height          =   3150
  12.    Left            =   750
  13.    LinkTopic       =   "Form1"
  14.    MaxButton       =   0   'False
  15.    MinButton       =   0   'False
  16.    ScaleHeight     =   2745
  17.    ScaleWidth      =   8040
  18.    Top             =   2205
  19.    Width           =   8160
  20.    Begin TextBox TxtOutput 
  21.       Height          =   285
  22.       Left            =   5160
  23.       TabIndex        =   5
  24.       Top             =   2160
  25.       Width           =   2655
  26.    End
  27.    Begin TextBox TxtInput 
  28.       Height          =   285
  29.       Left            =   1200
  30.       TabIndex        =   4
  31.       Top             =   2160
  32.       Width           =   2535
  33.    End
  34.    Begin CommandButton cmdCompute 
  35.       Caption         =   "Compute"
  36.       Height          =   735
  37.       Left            =   6360
  38.       TabIndex        =   0
  39.       Top             =   2880
  40.       Width           =   1095
  41.    End
  42.    Begin Gauge Gauge1 
  43.       Autosize        =   -1  'True
  44.       BackColor       =   &H00FFFFFF&
  45.       ForeColor       =   &H000000FF&
  46.       Height          =   375
  47.       InnerBottom     =   1
  48.       InnerLeft       =   1
  49.       InnerRight      =   1
  50.       InnerTop        =   1
  51.       Left            =   240
  52.       Max             =   100
  53.       NeedleWidth     =   1
  54.       TabIndex        =   1
  55.       Top             =   1320
  56.       Width           =   7575
  57.    End
  58.    Begin Label Label4 
  59.       Caption         =   "Input File:"
  60.       Height          =   255
  61.       Left            =   120
  62.       TabIndex        =   7
  63.       Top             =   2160
  64.       Width           =   975
  65.    End
  66.    Begin Label Label3 
  67.       Caption         =   "Output File:"
  68.       Height          =   255
  69.       Left            =   4080
  70.       TabIndex        =   6
  71.       Top             =   2160
  72.       Width           =   1095
  73.    End
  74.    Begin Label Label1 
  75.       Alignment       =   2  'Center
  76.       BackColor       =   &H00FFFFFF&
  77.       Caption         =   "Reformatting File"
  78.       FontBold        =   -1  'True
  79.       FontItalic      =   0   'False
  80.       FontName        =   "Arial"
  81.       FontSize        =   13.5
  82.       FontStrikethru  =   0   'False
  83.       FontUnderline   =   0   'False
  84.       Height          =   375
  85.       Left            =   2280
  86.       TabIndex        =   3
  87.       Top             =   240
  88.       Width           =   3855
  89.    End
  90.    Begin Shape Shape1 
  91.       Height          =   975
  92.       Left            =   120
  93.       Top             =   840
  94.       Width           =   7815
  95.    End
  96.    Begin Label Label2 
  97.       BackColor       =   &H00FFFFFF&
  98.       Caption         =   ".........10........20.........30.........40.........50.........60.........70.........80.........90......100%"
  99.       Height          =   255
  100.       Left            =   240
  101.       TabIndex        =   2
  102.       Top             =   960
  103.       Width           =   7575
  104.    End
  105. Sub cmdCompute_GotFocus ()
  106.     DoEvents
  107.     If Len(Dir$("parms.txt")) = 0 Then
  108.         MsgBox "Parms.txt file not found"
  109.         End
  110.     End If
  111.     Dim vparmarray()
  112.     Open "parms.txt" For Input As 3
  113.     Line Input #3, vparm
  114.     If UCase$(Left$(vparm, 7)) <> "INPUT=(" Then
  115.         MsgBox "No INPUT parameter record "
  116.         Close #3
  117.         End
  118.     Else
  119.         vpostart = 8           ' point to Input file Path Name
  120.         vpoend = InStr(vpostart, vparm, ")")
  121.         If vpoend = 0 Then
  122.             MsgBox "Error in INPUT statement"
  123.             Close #3
  124.             End
  125.         End If
  126.         vInput = Mid(vparm, vpostart, vpoend - vpostart) ' save Input file path name
  127.     End If
  128.     Line Input #3, vparm
  129.     If UCase$(Left$(vparm, 8)) <> "OUTPUT=(" Then
  130.         MsgBox "No OUTPUT parameter record "
  131.         Close #3
  132.         End
  133.     Else
  134.         vpostart = 9           ' point to Output file Path Name
  135.         vpoend = InStr(vpostart, vparm, ")")
  136.         If vpoend = 0 Then
  137.             MsgBox "Error in OUTPUT statement"
  138.             Close #3
  139.             End
  140.         End If
  141.         vOutput = Mid(vparm, vpostart, vpoend - vpostart) ' save Output file path name
  142.     End If
  143.     txtInput.Text = vInput
  144.     txtOutput.Text = vOutput
  145.     vparms = 0                    ' Set field statement counter to zero
  146.     Do While Not EOF(3)
  147.         Line Input #3, vparm
  148.         vparms = vparms + 1       ' Get number of fields statements
  149.     Loop
  150.     Close #3
  151.     If vparms = 0 Then
  152.         MsgBox "There are no FIELD statements"
  153.         End
  154.     End If
  155.     ReDim vparmarray(vparms * 3)     ' Provide array space for field statements
  156.     Open "parms.txt" For Input As 3
  157.     Line Input #3, vparm      ' Skip INPUT rec
  158.     Line Input #3, vparm      ' Skip OUTPUT rec
  159.     vreccount = 0                 ' Set record count for field statements to zero
  160.     varraycount = 0               ' Set array index to zero
  161.     Do While Not EOF(3)           ' Process field statements
  162.         vreccount = vreccount + 1 ' Add 1 to record counter
  163.         Line Input #3, vparm      ' read field statement
  164.         If UCase$(Left$(vparm, 7)) <> "FIELD=(" Then
  165.             MsgBox "Error in Parm record " + vreccount + Chr$(10) + vparm
  166.             Close #3
  167.             End
  168.         Else
  169.             vpostart = 8           ' point to first paramenter (start position)
  170.             vpoend = InStr(vpostart, vparm, ",")
  171.             If vpoend = 0 Then
  172.                 MsgBox "Error in Parm record " + vreccount + Chr$(10) + vparm
  173.                 Close #3
  174.                 End
  175.             End If
  176.             vparmarray(varraycount) = Mid(vparm, vpostart, vpoend - vpostart) ' save position parameter
  177.             varraycount = varraycount + 1      ' bump up array index by 1
  178.             vpostart = vpoend + 1              ' point to next parameter (length)
  179.             vpoend = InStr(vpostart, vparm, ",")
  180.             If vpoend = 0 Then
  181.                 MsgBox "Error in Parm record " + vreccount + Chr$(10) + vparm
  182.                 Close #3
  183.                 End
  184.             End If
  185.             vparmarray(varraycount) = Mid(vparm, vpostart, vpoend - vpostart) ' save length parameter
  186.             varraycount = varraycount + 1    ' bump up array index
  187.             vpostart = vpoend + 1            ' point to next parameter
  188.             vpoend = InStr(vpostart, vparm, ")")
  189.             If vpoend = 0 Then
  190.                 MsgBox "Error in Parm record " + vreccount + Chr$(10) + vparm
  191.                 Close #3
  192.                 End
  193.             End If
  194.             vparmarray(varraycount) = Mid(vparm, vpostart, vpoend - vpostart) ' save unpack flag
  195.             varraycount = varraycount + 1      ' bump up array index
  196.         End If
  197.     Loop
  198.     Close #3      ' close fields file
  199.             
  200.     If Len(Dir$(vInput)) = 0 Then
  201.         MsgBox "Input file " + vInput + " not found"
  202.         End
  203.     End If
  204.     If Len(Dir$(vOutput)) <> 0 Then
  205.         vmsg = "Write over " + vOutput + " ?"
  206.         vreply = MsgBox(vmsg, 33)
  207.         If vreply <> 1 Then
  208.             End
  209.         End If
  210.     End If
  211.     Open vInput For Input As 1
  212.     Open vOutput For Output As 2
  213.     vFilesize = LOF(1)
  214.     gauge1.Min = 0
  215.     gauge1.Max = vFilesize
  216.     gauge1.Value = 0
  217.     vinrecs = 0                       ' Input file record counter
  218.     Do While Not EOF(1)               ' Process input records
  219.         vinrecs = vinrecs + 1         ' Add 1 to record counter
  220.         Line Input #1, vInput         ' Read record from input file
  221.         gauge1.Value = gauge1.Value + Len(vInput) + 2' Update gauge
  222.         varraycount = 0               ' Set array index to 0
  223.         vparmcount = 0                ' Set number of field statements to zero
  224.         voutline = ""                 ' Set output line to Null
  225.         Do Until vparmcount = vparms        ' Process all field statements against input record
  226.             vparmcount = vparmcount + 1     ' increment field statement counter
  227.             If vparmarray(varraycount + 2) = 0 Then   ' if pack flag is zero then just move input data
  228.                 voutline = voutline + Mid$(vInput, vparmarray(varraycount), vparmarray(varraycount + 1))
  229.             Else
  230.                 vbytes% = vparmarray(varraycount + 1)  ' get length of packed field
  231.                 vbytepos = vparmarray(varraycount)    ' get input record postion of packed field
  232.                 vcounter% = 0                          ' set byte count of packed filed to zero
  233.                 Do Until vcounter% = vbytes%            ' do until all packed bytes are processed
  234.                     vcounter% = vcounter% + 1           ' increment packed byte counter
  235.                     vbyte = Mid$(vInput, vbytepos, 1) ' get packed byte
  236.                     vbyte = Asc(vbyte) And 240        ' Turn off low order bits
  237.                     vbyte = highbyte(vbyte)           ' convert result to unpacked character
  238.                     If vbyte = " " Then
  239.                         MsgBox "Invalid Packed data in input record " + vinrecs
  240.                         Close #1, #2
  241.                         End
  242.                     End If
  243.                     voutline = voutline + vbyte            ' move unpacked char to output line
  244.                     If vcounter% < vbytes% Then              ' if were not working on the last byte process low order bits
  245.                         vbyte = Mid$(vInput, vbytepos, 1)  ' get the packed byte again
  246.                         vbyte = Asc(vbyte) And 15          ' turn off the high order bits
  247.                         vbyte = lowbyte(vbyte)             ' convert result to unpacked character
  248.                         If vbyte = " " Then
  249.                             MsgBox "Invalid Packed data in input record " + vinrecs
  250.                             Close #1, #2
  251.                             End
  252.                         End If
  253.                         voutline = voutline + vbyte  ' move unpacked char to output line
  254.                     Else
  255.                         vbyte = Mid$(vInput, vbytepos, 1)  ' get the packed byte again
  256.                         vbyte = Asc(vbyte) And 15          ' turn off the high order bits
  257.                         If vbyte = &HD Then                ' D denotes negative data
  258.                             voutline = voutline + "-"      ' Anything else is treated as positive
  259.                         Else
  260.                             voutline = voutline + "+"
  261.                         End If
  262.                     End If
  263.                     vbytepos = vbytepos + 1          ' point to next packed character
  264.                 Loop
  265.             End If
  266.             varraycount = varraycount + 3      ' point to next field statement
  267.         Loop
  268.         Print #2, voutline
  269.     Loop
  270.     Close #1
  271.     Close #2
  272.     End
  273. End Sub
  274. Function highbyte (vbyte) As Variant
  275.     Select Case vbyte
  276.         Case &H0
  277.             highbyte = "0"
  278.         Case &H10
  279.             highbyte = "1"
  280.         Case &H20
  281.             highbyte = "2"
  282.         Case &H30
  283.             highbyte = "3"
  284.         Case &H40
  285.             highbyte = "4"
  286.         Case &H50
  287.             highbyte = "5"
  288.         Case &H60
  289.             highbyte = "6"
  290.         Case &H70
  291.             highbyte = "7"
  292.         Case &H80
  293.             highbyte = "8"
  294.         Case &H90
  295.             highbyte = "9"
  296.         Case Else
  297.             highbyte = " "
  298.     End Select
  299. End Function
  300. Function lowbyte (vbyte) As Variant
  301.     Select Case vbyte
  302.         Case &H0
  303.             lowbyte = "0"
  304.         Case &H1
  305.             lowbyte = "1"
  306.         Case &H2
  307.             lowbyte = "2"
  308.         Case &H3
  309.             lowbyte = "3"
  310.         Case &H4
  311.             lowbyte = "4"
  312.         Case &H5
  313.             lowbyte = "5"
  314.         Case &H6
  315.             lowbyte = "6"
  316.         Case &H7
  317.             lowbyte = "7"
  318.         Case &H8
  319.             lowbyte = "8"
  320.         Case &H9
  321.             lowbyte = "9"
  322.         Case Else
  323.             lowbyte = " "
  324.     End Select
  325. End Function
  326.