Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
proview
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Esteban Blanc
proview
Commits
c3644198
Commit
c3644198
authored
Sep 02, 2015
by
Claes Sjofors
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Doc fixes
parent
a89c000c
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
390 additions
and
9 deletions
+390
-9
src/doc/man/en_us/man_dg.dat
src/doc/man/en_us/man_dg.dat
+61
-0
src/doc/man/en_us/man_iog.odt
src/doc/man/en_us/man_iog.odt
+0
-0
src/doc/man/en_us/man_iog.pdf
src/doc/man/en_us/man_iog.pdf
+0
-0
src/doc/man/en_us/upgrade53.odt
src/doc/man/en_us/upgrade53.odt
+0
-0
src/doc/man/en_us/upgrade53.pdf
src/doc/man/en_us/upgrade53.pdf
+0
-0
src/doc/man/en_us/xtt_help.dat
src/doc/man/en_us/xtt_help.dat
+1
-1
src/doc/man/sv_se/man_dg.dat
src/doc/man/sv_se/man_dg.dat
+309
-0
src/doc/man/sv_se/man_geref.dat
src/doc/man/sv_se/man_geref.dat
+1
-1
src/doc/man/sv_se/xtt_help.dat
src/doc/man/sv_se/xtt_help.dat
+1
-1
src/lib/rt/src/rt_csup.c
src/lib/rt/src/rt_csup.c
+2
-3
src/wbl/pwrb/src/pwrb_c_strsel.wb_load
src/wbl/pwrb/src/pwrb_c_strsel.wb_load
+2
-1
wb/lib/wb/gtk/wb_bckw_gtk.cpp
wb/lib/wb/gtk/wb_bckw_gtk.cpp
+12
-1
wb/lib/wb/src/wb_vrepwbl.cpp
wb/lib/wb/src/wb_vrepwbl.cpp
+1
-1
No files found.
src/doc/man/en_us/man_dg.dat
View file @
c3644198
...
...
@@ -5785,6 +5785,50 @@ The utilities window is a graphic interface to different configurator commands.
For more information about the commands, see chapter Commands.
</topic>
<topic> backup_refman
Backup verktyg
Backupverktyget analyserar en runtime backupfil. Den gör det möjligt att
- inspektera innehållet i en backupfil.
- se skillnaden mellan två backupfiler lagrade vid olika tidpunkt.
- se skillnaden mellan en backupfil och motsvarande värden i utvecklingsdatabasen.
- överföra utvalda värden från backupfilen till utvecklingsdatabasen.
Backupfunktionen i Proview runtime, lagrar värden på objekt och attribute
specificerade med Backupobjekt, till backupfilen. Backupfilen läses vid
Proview uppstart och de tidigare lagrade värdena läggs in i realtidsdatabasen.
<h2>Visa innehållet i en backupfil.
Öppna backupfönstret från konfiguratorn för rotvolymen för den node från vilken
backupfilen har hämtats. Backupfönstret öppnas med kommandot 'backup show'.
Aktivera File/Open i menyn och välj en backupfil. Backupfilen kan vara en kopia
av den nuvarande backupfilen eller en kopia från ett tidigare tillfälle. Alla
attribut och deras värden visas i backupfönstret.
<image>dg_fig123.png
<b>Fig Visa backupfilen
<h2>Jämför två backupfiler
Öppna den första backupfilen för visning som beskrivs ovan. Aktivera sedan
File/Compare Backup File i menyn och välj den andra backupfilen. Attribut med värden
som skiljer sig mellan filerna visas nu.
<h2>Jämför backupfilen med utvecklingsdatabasen
Öppna backupfilen för visning, och aktivera sedan File/Compare Databse in menyn.
Attribut med värden som skiljer sig mellan backupfilen och utvecklingsdatabasen
visas nu.
<h2>Överför värden från en backupfil till utvecklingsdatabasen
Gå till editeringsmod i konfiguratorn, och öppna sedan backupfönstret. Öppna
backupfilen för visning, och jämför den med värden från utvecklingsdatabasen
med File/Compare Database in menyn. Attribut med värden som skiljer mellan
backupfilen och utvecklingsdatabasen visas nu med checkboxar. Markera de värden
som ska överföras till databasen, och activera File/Transfer to database i menyn.
Aktivera även Save i konfiguratorn för att spara ändringarna.
</topic>
<topic> builddir_refman
Build Directories
...
...
@@ -9496,6 +9540,21 @@ Print plc documents.
/all <t>Print all plcpgms.
</TOPIC>
<TOPIC> redraw <style> function
Command redraw
Redraw the plc code.
<B>wtt> redraw /all
<B>wtt> redraw /hierarchy=
<B>wtt> redraw /plcpgm=
/plcpgm <t>Redraw a plcpgm.
/hierarchy <t>Hierarchy object. All plc in the hierarchy will
<t>be redrawn.
/all <t>Redraw all plcpgms.
</TOPIC>
<TOPIC> release subwindow <style> function
Command release subwindow
...
...
@@ -10001,6 +10060,7 @@ RenameObject() <LINK> renameobject()
MoveObject() <LINK> moveobject()
OpenPlcPgm() <LINK> openplcpgm()
CreatePlcObject() <LINK> createplcobject()
ClosePlcObject() <LINK> closeplcobject()
CreatePlcConnection() <LINK> createplcconnection()
SetPlcObjectAttr() <LINK> setplcobjectattr()
PlcConnect() <LINK> plcconnect()
...
...
@@ -11000,6 +11060,7 @@ CreateObject() <t>Create an object. <LINK> createobject()
RenameObject() <t>Change name of an object. <LINK> renameobject()
MoveObject() <t>Move an object. <LINK> moveobject()
OpenPlcPgm() <t>Open a PlcPgm. <LINK> openplcpgm()
ClosePlcPgm() <t>Close a PlcPgm. <LINK> closeplcpgm()
CreatePlcObject() <t>Create a plc object. <LINK> createplcobject()
CreatePlcConnection() <t>Create a plc connection. <LINK> createplcconnection()
SetPlcObjectAttr() <t>Set attribute in a plc object. <LINK> setplcobjectattr()
...
...
src/doc/man/en_us/man_iog.odt
View file @
c3644198
No preview for this file type
src/doc/man/en_us/man_iog.pdf
View file @
c3644198
No preview for this file type
src/doc/man/en_us/upgrade53.odt
View file @
c3644198
No preview for this file type
src/doc/man/en_us/upgrade53.pdf
View file @
c3644198
No preview for this file type
src/doc/man/en_us/xtt_help.dat
View file @
c3644198
...
...
@@ -5,7 +5,7 @@
<h1>Overview
<b>Project Help <link> index,,$pwrp_
exe
/xtt_help.dat
<b>Project Help <link> index,,$pwrp_
load
/xtt_help.dat
<b>Operator's Guide <link> index,,$pwr_lang/man_opg.dat
<b>Classes <link> classes
<b>Index <index>
...
...
src/doc/man/sv_se/man_dg.dat
View file @
c3644198
...
...
@@ -5731,6 +5731,53 @@ Utilities f
För en närmare beskrivning av respektive kommando, se avsnittet Kommandon.
</topic>
<topic> backup_refman
Backup utility
The backup utility analyses a runtime backup file. It makes it possible to
- inspect the content of the backup file.
- see the difference between two backup files stored and different times.
- see the difference between the backupfile and the corresponding values in the
development database.
- Transfer selected values from the backup file to the development database.
The backup function in the Proview runtime enviroment, stores the values of
objects and attributes specified with Backup objects, in the backup file. The
is read at Proview startup and the previously stored values are inserted into
the realtime database.
<h2>Display the content of a backup file
Open the backup utility from the root volume configurator of the node from which the
backup file is fetched. The backup utility is opened with the command 'backup show'.
Activate File/Open in the menu and select a backup file. The backup file can be a copy
of the current backup file or a copy from a previous occation. All the attributes and
their values are displayed in the backup window.
<image>dg_fig123.png
<b>Fig Display backup file
<h2>Compare two backup files
Open the first backup file for display as described above. Then activate
File/Compare Backup File in the menu and select the other backup file. The attributes
with values that differs between the files are now displayed.
<h2>Compare a backup file with the development database
Open the backup file for display, and then activate File/Compare Database in the menu.
The attributes with values that differs between the backup file and the development
database in now displayed.
<h2>Transfer values from a backup file to the development database
Enter edit mode in the configurator and then open the backup utility. Open the backup
file for display, and then compare this with the values in the development database from
File/Compare Database in the menu. The attributes with values that differs between the
backup file and the database are now displayed with checkboxes. Check the values you
want to transfer, and activate File/Transfer to database in the menu. Finally activate
Save in the configurator to store the modifications.
</topic>
<topic> builddir_refman
Build Directories
...
...
@@ -9383,6 +9430,21 @@ Skriv ut plc dokument.
/all <t>Skriv ut alla plcpgm.
</TOPIC>
<TOPIC> redraw <style> function
Kommando redraw
Rita om plc-koden.
<B>wtt> redraw /all
<B>wtt> redraw /hierarchy=
<B>wtt> redraw /plcpgm=
/plcpgm <t>Rita om ett plcpgm.
/hierarchy <t>Hierarkiobjekt. Alla plcpgm i hierarkin kommer att
<t>ritas om.
/all <t>Rita om alla plcpgm.
</TOPIC>
<TOPIC> release subwindow <style> function
Kommando release subwindow
...
...
@@ -9867,6 +9929,7 @@ CreateObject() <LINK> createobject()
RenameObject() <LINK> renameobject()
MoveObject() <LINK> moveobject()
OpenPlcPgm() <LINK> openplcpgm()
ClosePlcPgm() <LINK> closeplcpgm()
CreatePlcObject() <LINK> createplcobject()
CreatePlcConnection() <LINK> createplcconnection()
SetPlcObjectAttr() <LINK> setplcobjectattr()
...
...
@@ -10858,6 +10921,7 @@ CreateObject() <t>Skapa ett objekt. <LINK> createobject()
RenameObject() <t>Ändra namn på ett objekt. <LINK> renameobject()
MoveObject() <t>Flytta ett objekt. <LINK> moveobject()
OpenPlcPgm() <t>Öppna ett PlcPgm. <LINK> openplcpgm()
ClosePlcPgm() <t>Stäng ett PlcPgm. <LINK> closeplcpgm()
CreatePlcObject() <t>Skapa ett plc-objekt. <LINK> createplcobject()
CreatePlcConnection() <t>Skapa en plc-koppling. <LINK> createplcconnection()
SetPlcObjectAttr() <t>Sätt värde på ett attribut i ett plc-objekt. <LINK> setplcobjectattr()
...
...
@@ -11258,6 +11322,251 @@ godtycklig typ value attributets v
<c> SetAttribute( "Pump-V1-Switch.Description", "Valve switch open");
</TOPIC>
<TOPIC> createobject() <style> function
CreateObject()
int CreateObject( string name, string class, string destination, int destcode)
<b>Beskrivning
Skapa ett objekt.
Returnerar status för operationen.
<b>Argument
string <t>name <t>objektsnamn. Utan path.
string <t>class <t>objektets klass.
string <t>destination <t>destinationsobjekt. Förälder eller syskon till objektet.
int <t>destcode <t>destinationskod. 1 första barn, 2 sista barn,
<t><t>3 efter, 4 före.
<b>Exempel
<c> CreateObject( "Temperature", "BaseTempSensor", "Pump-V1", 2);
</TOPIC>
<TOPIC> renameobject() <style> function
RenameObject()
int RenameObject( string name, string newname)
<b>Beskrivning
Ändra namn på ett objekt.
Returnerar status för operationen.
<b>Argument
string <t>name <t>tidigare namn med path.
string <t>newname <t>nytt namn utan path.
<b>Exempel
<c> RenameObject( "H1-Zon1-Temp2", "PT2");
</TOPIC>
<TOPIC> moveobject() <style> function
MoveObject()
int MoveObject( string name, string destination, int destcode)
<b>Beskrivning
Flytta ett objekt.
Returnerar status för operationen.
<b>Argument
string <t>name <t>namn med path.
string <t>destination <t>destinationsobjekt. Förälder eller syskon till objektet
<t><t>i den nya positionen.
int <t>destcode <t>destinationskod. 1 första barn, 2 sista barn,
<t><t>3 efter, 4 före.
<b>Exempel
<c> MoveObject( "H1-Zon1-Temp2", "H1-Zon2", 1);
</TOPIC>
<TOPIC> openplcpgm() <style> function
OpenPlcPgm()
int OpenPlcPgm( string name)
<b>Beskrivning
Öppna ett plcprogram och en editeringssession för plc.
Returnerar status för operationen.
Det får inte finnas några osparade operationer när den här funktionen anropas.
Endast ett program kan vara öppet åt gången.
Editeringssessionen ska stängas med ett anropt ill ClosePlcPgm():
I editeringssessionen kan endast plc-funktionerna CreatePlcObject(),
CreatePlcConnection(), SetPlcObjectAttr() och PlcConnect() användas för
att modifiera och skapa objekt. Access för den tidigare sessionen är
tillfälligt satt till readonly när plc-editering är aktiv.
<b>Argument
string name namn på ett PlcPgm objekt.
<b>Exempel
<c> OpenPlcPgm( "Pump-V1-Control");
<c> ...
<c> ClosePlcPgm();
</TOPIC>
<TOPIC> closeplcpgm() <style> function
ClosePlcPgm()
int ClosePlcPgm()
<b>Beskrivning
Stänger en editeringssession för plc
<b>Exempel
<c> OpenPlcPgm( "Pump-V1-Control");
<c> ...
<c> ClosePlcPgm();
</TOPIC>
<TOPIC> createplcobject() <style> function
CreatePlcObject()
int CreatePlcObject( string name, string class, float x, float y [, string destination,
int inputmask, int outputmask, int invertmask])
<b>Beskrivning
Skapar ett funktionsobjekt i en editeringssession för plc.
Funktionen kan endast användas i en editeringssession för plc, som har öppnats med
ett anrop till OpenPlcPgm().
Objektet positioneras på koordinaterna x och y. Om destination, ett dokumentobjekt, har
angivits, är kordinateran relativa till detta objekt, annars absoluta.
Om maskerna inte anges används defaultmasker.
<b>Argument
string <t>name <t>Objektsnamn, utan path.
string <t>class <t>Klass på objektet.
float <t>x <t>x-koordinat.
float <t>y <t>y-koordinat.
string <t>destination <t>Valfritt. Ett dokumentobjekt. Om ett dokumentobjekt är angivet
<t><t>är koordinaterna relativa till detta objekt.
int <t>inputmask <t>Valfritt. Mask där bitarna indikerar synliga ingångspinnar i
<t><t>funktionsblocket.
int <t>outputmask <t>Valfritt. Mask där bitarna indikerar synliga utgångspinnar i
<t><t>funktionsblocket.
int <t>invmask <t>Valfritt. Mask där bitarna indikerar inverterade ingångspinnar.
<b>Exempel
<c> OpenPlcPgm( "Pump-V1-Control");
<c> CreatePlcObject( "Document0", "Document", 1.2, 0.0);
<c> CreatePlcObject( "And0", "And", 0.3, 0.1, "Document0", 15, 1, 3);
<c> CreatePlcObject( "V1", "BaseCValve", 0.3, 0.4, "Document0");
<c> ClosePlcPgm();
</TOPIC>
<TOPIC> createplcconnection() <style> function
CreatePlcConnection()
int CreatePlcConnection( string source, string sourceattr, string dest, string destattr [,
int feedback])
<b>Description
Skapar en plc-koppling mellan två funktionsobjekt.
Funktionen kan endast användas i en editeringssession för plc som startas med ett
anrop till OpenPlcPgm().
In- och utgångspinnarna som kopplingen ska anslutas till, anges med attributnamnen för
pinnarna. Om en sträckad feedback-koppling ska skapas, kan detta anges med feedback
argumentet.
<b>Argument
string <t>source <t>Objekt som kopplingen utgår ifrån. Namn utan path.
string <t>sourceattr <t>Attribut för den pinne som kopplingen utgår ifrån.
string <t>dest <t>Destinationsobjekt. Namn utan path.
string <t>destattr <t>Attribut för pinne på destinationsobjektet.
int <t>feedback <t>Valfritt. Om 1 skapas en sträckad feedback-koppling.
<b>Exempel
<c> OpenPlcPgm( "Pump-V1-Control");
<c> ...
<c> CreatePlcObject( "And0", "And", 0.3, 0.1, "Document0", 15, 1, 3);
<c> CreatePlcObject( "And1", "And", 0.6, 0.1, "Document0", 15, 1, 3);
<c> CreatePlcConnection( "And0", "Status", "And1", "In1");
<c> # Feedback connection
<c> CreatePlcConnection( "And1", "Status", "And0", "In4", 1);
<c> ClosePlcPgm();
</TOPIC>
<TOPIC> plcconnect() <style> function
PlcConnect()
int PlcConnect( string plcobject, string connectobject)
<b>Beskrivning
Aktiverar 'connect'funktionen för plc, till exempel för att koppla Get eller Sto
funktionsobjekt till signaler eller attribut i planthierarkin.
Funktionen kan endast användas i en editeringssession för plc som startas med ett
anrop till OpenPlcPgm().
<b>Argument
string <t>plcobject <t>Namn, utan path, på det funktionsobjekt som ska kopplas.
string <t>connectobject <t>Namn på objekt som ska kopplas till. Fullständigt namn
<t><t>med path ska anges.
<b>Exempel
<c> OpenPlcPgm( "Pump-V1-Control");
<c> ...
<c> CreatePlcObject( "GetDv0", "GetDv", 0.3, 0.1, "Document0");
<c> PlcConnect( "GetDv0", "Pump-V1-Active");
<c> ...
<c> ClosePlcPgm();
</TOPIC>
<TOPIC> setplcobjectattr() <style> function
SetPlcObjectAttr()
int SetPlcObjectAttr( string attribute, (arbitrary type) value)
<b>Beskrivning
Sätt ett värde i ett plc-objekt.
Funktionen kan endast användas i en editeringssession för plc som startas med ett
anrop till OpenPlcPgm().
OpenPlcPgm().
<b>Argument
string <t>name <t>Namn på attributet. Utan path.
arbitrary type <t>value <t>värde som ska sättas.
<b>Exempel
<c> OpenPlcPgm( "Pump-V1-Control");
<c> CreatePlcObject( "Document0", "Document", 1.3, 0.0);
<c> SetPlcObjectAttr( "Document0.DocumentOrientation", 1);
<c> SetPlcObjectAttr( "Document0.DocumentSize", 3);
<c> ...
<c> ClosePlcPgm();
</TOPIC>
</headerlevel>
<TOPIC> misc_functions <style> function
...
...
src/doc/man/sv_se/man_geref.dat
View file @
c3644198
...
...
@@ -3663,7 +3663,7 @@ ScrollingText
Visa en rullande text.
Obje
c
tet kopplas till ett sträng-attribut i databasen, och texten i attributet visas.
Obje
k
tet kopplas till ett sträng-attribut i databasen, och texten i attributet visas.
<b>Attribut <t><t>Beskrivning
ScrollingText.Attribute <t><t>Attribut i databasen av typ String.
...
...
src/doc/man/sv_se/xtt_help.dat
View file @
c3644198
...
...
@@ -5,7 +5,7 @@
<h1>versikt
<b>Projekthjlp <link> index,,$pwrp_
exe
/xtt_help.dat
<b>Projekthjlp <link> index,,$pwrp_
load
/xtt_help.dat
<b>Operatrshandbok <link> index,,$pwr_lang/man_opg.dat
<b>Klasser <link> classes
<b>Index <index>
...
...
src/lib/rt/src/rt_csup.c
View file @
c3644198
...
...
@@ -95,9 +95,8 @@ csup_Init (
max_delay
=
cp
->
o
->
MaxDelay
;
cp
->
o
->
DelayLimit
.
tv_sec
=
tv_sec
=
(
int
)
max_delay
;
cp
->
o
->
DelayLimit
.
tv_nsec
=
(
int
)((
max_delay
-
(
float
)
tv_sec
+
FLT_EPSILON
)
*
1.0e9
);
// printf("maxdelay: %f, tv_sec: %d, tv_nsec: %d\n", cp->o->MaxDelay, cp->o->DelayLimit.tv_sec, cp->o->DelayLimit.tv_nsec);
errh_Info
(
"maxdelay: %f, tv_sec: %d, tv_nsec: %d"
,
cp
->
o
->
MaxDelay
,
cp
->
o
->
DelayLimit
.
tv_sec
,
cp
->
o
->
DelayLimit
.
tv_nsec
);
// errh_Info("maxdelay: %f, tv_sec: %d, tv_nsec: %d", cp->o->MaxDelay,
// cp->o->DelayLimit.tv_sec, cp->o->DelayLimit.tv_nsec);
}
if
(
lst_IsEmpty
(
NULL
,
lh
))
...
...
src/wbl/pwrb/src/pwrb_c_strsel.wb_load
View file @
c3644198
...
...
@@ -45,7 +45,8 @@ SObject pwrb:Class
! @image orm_strsel_fo.png
!
! Select one of two inputs.
!
!
! When Control is high, In1 is selected, otherwise In2 is selected.
!*/
Object StrSel $ClassDef 646
Body SysBody
...
...
wb/lib/wb/gtk/wb_bckw_gtk.cpp
View file @
c3644198
...
...
@@ -167,6 +167,17 @@ WbBckWGtk::WbBckWGtk (
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
menu_bar
),
view
);
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
view
),
GTK_WIDGET
(
view_menu
));
// Help menu
GtkWidget
*
help_backup
=
gtk_image_menu_item_new_from_stock
(
GTK_STOCK_HELP
,
NULL
);
g_signal_connect
(
help_backup
,
"activate"
,
G_CALLBACK
(
WbBckWGtk
::
activate_help
),
this
);
GtkMenu
*
help_menu
=
(
GtkMenu
*
)
g_object_new
(
GTK_TYPE_MENU
,
NULL
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
help_menu
),
help_backup
);
GtkWidget
*
help
=
gtk_menu_item_new_with_mnemonic
(
"_Help"
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
menu_bar
),
help
);
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
help
),
GTK_WIDGET
(
help_menu
));
form
=
gtk_vbox_new
(
FALSE
,
0
);
// Create bckwnav
...
...
@@ -317,7 +328,7 @@ void WbBckWGtk::activate_zoom_reset( GtkWidget *w, gpointer data)
void
WbBckWGtk
::
activate_help
(
GtkWidget
*
w
,
gpointer
data
)
{
CoXHelp
::
dhelp
(
"
messagewindow
_refman"
,
0
,
navh_eHelpFile_Other
,
"$pwr_lang/man_dg.dat"
,
CoXHelp
::
dhelp
(
"
backup
_refman"
,
0
,
navh_eHelpFile_Other
,
"$pwr_lang/man_dg.dat"
,
true
);
}
...
...
wb/lib/wb/src/wb_vrepwbl.cpp
View file @
c3644198
...
...
@@ -107,7 +107,7 @@ wb_vrep *wb_vrepwbl::next()
void
wb_vrepwbl
::
error
(
const
char
*
msg
,
const
char
*
file
,
int
line_number
)
{
char
str
[
400
];
s
printf
(
str
,
"Wbl error: %s, %s line: %d"
,
msg
,
file
,
line_number
);
s
nprintf
(
str
,
sizeof
(
str
)
,
"Wbl error: %s, %s line: %d"
,
msg
,
file
,
line_number
);
MsgWindow
::
message
(
'E'
,
str
);
// cout << "Wbl error: " << msg << ", " << file << " line: " << line_number << endl;
error_cnt
++
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment