Jump to content

Old Code: "cmdecho" error


woodman78

Recommended Posts

Hi,

I have some code, probably written by someone on this site, that I want to modify slightly. However I have run into trouble. The command runs fine but just bombs out after the pline command and doesn't reset the system variables. Here is the code:

 

;//////////////////////////////////////////////////////////////////////////
;
; Start-Up Function
;
(defun C:ESS (/ SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
 (setq SUCE (getvar "cmdecho"))
 (setq SUOM (getvar "orthomode"))
 (setq SUSM (getvar "osmode"))
 (setq SUAB (getvar "angbase"))
 (setq SUAD (getvar "angdir"))
 (setq SUCL (getvar "clayer"))
 (setq SUCR (getvar "cecolor"))  
(ESS_MF)
 (princ)
)
;
;//////////////////////////////////////////////////////////////////////////
;
; Main Function
;
(defun ESS_MF (/ SIZE$ SIZE MIDPT PLEN PT01  PT02 a b COLR SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
 (setq temperr *error*)
 (setq *error* ESS_ETRAP)

(entmake
 (list
   (cons 0 "STYLE")
   (cons 100 "AcDbSymbolTableRecord")
   (cons 100 "AcDbTextStyleTableRecord")
   (cons 2 "CCC_Services")
   (cons 3 "Verdana.ttf")
   (cons 40 0)
   (cons 70 0)
 )
)

 (setq S1_list '( "1500mm"  "1350mm" "1200mm" "1050mm" "900mm" "750mm" "675mm" "600mm" "525mm" "450mm" "375mm" "300mm" "225mm" "150mm"))
 (setq dcl_id (load_dialog "ESS.dcl"))
 (if
   (not
     (new_dialog "ESS" dcl_id)
   )
   (progn
     (ALERT "Can not find your dcl file")
     (exit)
   )
 )
 (start_list "S1")
 (mapcar 'add_list S1_list)
 (end_list)
 (if SIZE:DEF
   (set_tile "S1" (itoa SIZE:DEF))
 )
 (action_tile "cancel"
  "(done_dialog)(setq userclick nil)"
 )
 (action_tile "accept"
   (strcat
    "(progn
     (setq S:IZE (atoi (get_tile \"S1\")) SIZE:DEF S:IZE)"
    "(done_dialog)(setq userclick T))"
   )
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (if userclick
   (ESS_VARIABLE)
 )
 (princ)
)
;
;//////////////////////////////////////////////////////////////////////////
;
; ESS_VARIABLE Function
;
(defun ESS_VARIABLE ()
 (progn 
   (setq SIZE$ (fix S:IZE))
   (setq SIZE$ (nth S:IZE S1_list))
   (cond
     ((= SIZE$ "1500mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E1500")(setq LTYP "E1500"))
     ((= SIZE$ "1350mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E1350")(setq LTYP "E1500"))
     ((= SIZE$ "1200mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E1200")(setq LTYP "E1500"))      
     ((= SIZE$ "1050mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E1050")(setq LTYP "E1500"))
     ((= SIZE$ "900mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E900")(setq LTYP "E1500"))
     ((= SIZE$ "750mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E750")(setq LTYP "E1500"))
     ((= SIZE$ "675mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E675")(setq LTYP "E1500"))      
     ((= SIZE$ "600mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E600")(setq LTYP "E1500"))
     ((= SIZE$ "525mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E525")(setq LTYP "E1500"))
     ((= SIZE$ "450mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E450")(setq LTYP "E1500"))
     ((= SIZE$ "375mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E375")(setq LTYP "E1500"))      
     ((= SIZE$ "300mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E300")(setq LTYP "E1500"))
     ((= SIZE$ "225mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E225")(setq LTYP "E1500"))      
     ((= SIZE$ "150mm")(setq SIZE$ "Existing_Drainage_Storm_Sewer_Concrete_E150")(setq LTYP "E1500"))
   )
 )
 (setq SIZE SIZE$) 
 (ESS_OUTPUT)
 (princ)
)
;
;//////////////////////////////////////////////////////////////////////////
;
; ESS_OUTPUT Function
;
(defun ESS_OUTPUT ()
 (setq a (strcat "CCC_DR_"LTYP)
       b (strcat "CCC_SERVICES_"SIZE)
 )
 (if
   (not
     (tblsearch "LTYPE" a)
   )
   (command "_.-linetype" "_l" a "CCC_Drainage_Existing Storm.lin" "")
 )
 (command "_.-layer" "_N" b "_M" b "_L" a b "_C" "84" b "_LW" "0.3" b "" )
 (command "_-color"  "bylayer")
 (command "._-linetype"  "s"  "bylayer" "")
 (setvar "angbase" 0.0000)
 (setvar "cmdecho" 1)
 (setvar "angdir"  0)
 (setvar "clayer" b)
 (setvar "orthomode" 0)
 (setvar "osmode"    16383)
 (setvar "angbase" 0.0000)
 (command "_.-layer" "_S" b "")
 ;(setvar "plinegen" 1)
 (command "._pline")
  (setvar "osmode" 16383)
 
 (setq *error* temperr)
 (setvar "cmdecho" SUCE)
 (setvar "orthomode" SUOM)
 (setvar "osmode" SUSM)
 (setvar "angbase" SUAB)
 (setvar "angdir" SUAD)
 (setvar "clayer" SUCL)
 (setvar "cecolor" SUCR)
 (princ)
)
;
;//////////////////////////////////////////////////////////////////////////
;
; Error Trap Function
;
(defun ESS_ETRAP (errmsg)
 (command nil nil nil)
 (if
   (not
     (member errmsg '("console break" "Function Cancelled"))
   )
   (princ (strcat "\nError:" errmsg))
 )
 (setvar "cmdecho"   SUCE)
 (setvar "orthomode" SUOM)
 (setvar "osmode"    SUSM)
 (setvar "angbase"   SUAB)
 (setvar "angdir"    SUAD)
 (princ "\nError, Restoring ESS_VARIABLEs.")
 (terpri)
 (setq *error* temperr)
 (princ)
)
;
;//////////////////////////////////////////////////////////////////////////

 

Here is the dump at the end command with the error:

Current layer:  "CCC_SERVICES_Existing_Drainage_Storm_Sewer_Concrete_E1500"
Enter an option 
[?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Fre
eze/Thaw/LOck/Unlock/stAte/Description/rEconcile]: _S
Enter layer name to make current or <select object>: 
CCC_SERVICES_Existing_Drainage_Storm_Sewer_Concrete_E1500 Enter an option 
[?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Fre
eze/Thaw/LOck/Unlock/stAte/Description/rEconcile]:
Command: ._pline
Specify start point:[color="red"] AutoCAD variable setting rejected: "cmdecho" nil[/color]
Specify start point:
Current line-width is 0.000
Specify next point or [Arc/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:

 

I would appreciate it if someone could help with solving the error.

 

Thanks.

Link to comment
Share on other sites

There were some variables that were localized twice, so the failure of atempt to restore the environment:

(defun ESS_MF (/ SIZE$ SIZE MIDPT PLEN PT01  PT02 a b COLR [color=red][s]SUCE SUOM SUSM SUAB SUAD SUCL SUCR[/s][/color])

 

What are you looking to achieve with this code? To allow user to interactivelly draw a polyline?

(command "._pline")

Link to comment
Share on other sites

Yes. To have the user draw a polyline and reset the system variables on completion. This is a slightly different version of the code but it bombs out after the pline command and doesn't reset the system variables. Can anyone help with this?

 

;//////////////////////////////////////////////////////////////////////////
;
; Start-Up Function
;
(defun C:PRWMDIA (/ HOLE$ SIZE$ HOLE SIZE PT01 PT02 a b lw DEGREES RADIANS)
 (PRWMDIA_SAVE)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; Save User Settings Function.
;
(defun PRWMDIA_SAVE (/ SUS SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
 (setq SUS_LIST (list "cmdecho" "orthomode" "osmode" "blipmode" "clayer" "angbase" "angdir" "cecolor"))
 (setq TERR$ *error*)
 (setq *error* PRWMDIA_ETRAP)
 (PRWMDIA_MF)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; Main Function
;
(defun PRWMDIA_MF ()
 (setq T1_list '("Type A" "Type B"))
 (setq S1_list '("300mm" "250mm" "200mm" "150mm" "100mm"))
 (setq dcl_id (load_dialog "PRWMDIA.dcl"))
 (if (not (new_dialog "PRWMDIA" dcl_id))
   (progn (ALERT "Can not find your dcl file")
     (exit)))
 (start_list "T1")
 (mapcar 'add_list T1_list)
 (end_list)
 (start_list "S1")
 (mapcar 'add_list S1_list)
 (end_list)
 (if HOLE:DEF (set_tile "T1" (itoa HOLE:DEF)))
 (if SIZE:DEF (set_tile "S1" (itoa SIZE:DEF)))
 (action_tile "cancel" "(done_dialog)(setq userclick nil)")
 (action_tile "accept"
   (strcat
    "(progn
     (setq H:OLE (atoi (get_tile \"T1\")) HOLE:DEF H:OLE)"
    "(setq S:IZE (atoi (get_tile \"S1\")) SIZE:DEF S:IZE)"
    "(done_dialog)(setq userclick T))"))
 (start_dialog)
 (unload_dialog dcl_id)
 (if userclick
   (PRWMDIA_VARIABLE))
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; PRWMDIA_VARIABLE Function
;
(defun PRWMDIA_VARIABLE ()
 (progn
   (setq HOLE$ (fix H:OLE))
   (setq HOLE$ (nth H:OLE T1_list))
   (cond
     ((= HOLE$ "Type A"))
     ((= HOLE$ "Type B"))))
 (setq HOLE HOLE$)
 (progn 
   (setq SIZE$ (fix S:IZE))
   (setq SIZE$ (nth S:IZE S1_list))
   (cond
     ((= SIZE$  "300mm")(setq SIZE$  "300D"))
     ((= SIZE$  "250mm")(setq SIZE$  "250D"))
     ((= SIZE$  "200mm")(setq SIZE$  "200D"))
     ((= SIZE$  "150mm")(setq SIZE$  "150D"))
     ((= SIZE$  "100mm")(setq SIZE$  "100D"))))
 (setq SIZE SIZE$) 
 (PRWMDIA_OUTPUT)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; PRWMDIA_OUTPUT Function
;
(defun PRWMDIA_OUTPUT ()
 (if (null (tblsearch "STYLE" "CCC_Services"))
   (entmake
     (list
       (cons 0 "STYLE")
       (cons 100 "AcDbSymbolTableRecord")
       (cons 100 "AcDbTextStyleTableRecord")
       (cons 2 "CCC_Services")
       (cons 3 "Verdana.ttf")
       (cons 40 0)
       (cons 70 0))))
 (setq a  (strcat "CCC_WM_"SIZE"_"HOLE)
       b  (strcat "CCC_SERVICES_PROPOSED_Watermain_Ductile_Iron_"SIZE"_"HOLE)
       lw 30)
 (if (null (tblsearch "LTYPE" a))
   (command "_.-linetype" "_l" a "CCC_Watermain_DI.lin" ""))
 (if (null (tblsearch "LAYER" b))
 (command "_.-layer" "_N" b "_M" b "_L" a b "_C" "30" b "_LW" "0.3" b "" ))
 (command "_-color"  "bylayer")
 (command "._-linetype"  "s"  "bylayer" "")    
 (setvar "cmdecho" 0)
 (setvar "angbase" 0.0000)
 (setvar "angdir"  0)
 (setvar "orthomode" 0)
 (setvar "osmode"    16383)
 (command "_.-layer" "_S" b "")
 (setvar "plinegen" 1)
 (command "._pline")
 (PRWMDIA_RESTORE)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; Degrees to Radians Function
;
(defun PRWMDIA_DTR (DEGREES)
(* pi (/ DEGREES 180.0)))
;
;//////////////////////////////////////////////////////////////////////////
;
; Radians to Degrees Function
;
(defun PRWMDIA_RTD (RADIANS)
 (* 180.0 (/ RADIANS pi)))
;
;//////////////////////////////////////////////////////////////////////////
;
; Restore User Settings Function.
;
(defun PRWMDIA_RESTORE ()
 (setq *error* TERR$)
 (if SUS (mapcar 'setvar SUS_LIST SUS))
 (princ "\nProgram completed and will now restore the user settings and exit.")
 (princ))
;
;/////////////////////////////////////////////////////////////////////////////
;
; Error Trap Function.
;
(defun PRWMDIA_ETRAP (ERRORMSG)
 (command nil nil nil)
 (if (not (member ERRORMSG '("console break" "Function cancelled")))
   (princ (strcat "\nError:" ERRORMSG)))
 (if SUS (mapcar 'setvar SUS_LIST SUS))
 (princ "\nAn *error* has occured!")
 (princ "\nThe program will now restore the user settings and exit.")
 (terpri)
 (setq *error* TERR$)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////

Edited by woodman78
Mispelling
Link to comment
Share on other sites

woodman78,

 

Those condition statements are nuts, each one (1st example & 2nd example) only take 1-single line of code.

(setq SIZE$ (strcat "Existing_Drainage_Storm_Sewer_Concrete_E" (itoa(atoi SIZE$)))
     LTYP "E1500")
)

 

 

(setq  SIZE$ (strcat (itoa(atoi SIZE$)) "D"))

 

Bruce

Link to comment
Share on other sites

It does not appear that you defined the system variable values in the SUS variable list prior to running the functions, so there is no original system settings saved any where. You defined the list of system settings "SUS_LIST" to change but not their original values. You should define the SUS variable at the same time you define the list of system settings.

Link to comment
Share on other sites

Replace the existing function with the current one.

 

I have not tested anything, just saw this error.

 

(defun PRWMDIA_SAVE (/  SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
   (setq SUS_list '(cmdecho orthomode osmode blipmode clayer angbase angdir cecolor)
         SUS       (mapcar 'getvar SUS_list)
         TERR$ *error*
         *error* PRWMDIA_ETRAP
         )
     (PRWMDIA_MF)
     (princ)
   )

 

Then to reset the system variables you need to use this.

 

   (mapcar 'setvar SUS_list SUS)

Link to comment
Share on other sites

Thanks Snownut,

 

I made those changes but the system variables still aren't resetting:

 

;//////////////////////////////////////////////////////////////////////////
;
; Start-Up Function
;
(defun C:PRWMDIA (/ HOLE$ SIZE$ HOLE SIZE PT01 PT02 a b lw DEGREES RADIANS)
 (PRWMDIA_SAVE)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; Save User Settings Function.
;
(defun PRWMDIA_SAVE (/ SUS SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
 ;(setq SUS_LIST (list "cmdecho" "orthomode" "osmode" "blipmode" "clayer" "angbase" "angdir" "cecolor"))
 ;(setq TERR$ *error*)
 ;(setq *error* PRWMDIA_ETRAP)
[color="red"]    (setq SUS_list '(cmdecho orthomode osmode blipmode clayer angbase angdir cecolor))
         SUS       (mapcar 'getvar SUS_list)
         TERR$ *error*
         *error* PRWMDIA_ETRAP[/color]
 (PRWMDIA_MF)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; Main Function
;
(defun PRWMDIA_MF ()
 (setq T1_list '("Type A" "Type B"))
 (setq S1_list '("300mm" "250mm" "200mm" "150mm" "100mm"))
 (setq dcl_id (load_dialog "PRWMDIA.dcl"))
 (if (not (new_dialog "PRWMDIA" dcl_id))
   (progn (ALERT "Can not find your dcl file")
     (exit)))
 (start_list "T1")
 (mapcar 'add_list T1_list)
 (end_list)
 (start_list "S1")
 (mapcar 'add_list S1_list)
 (end_list)
 (if HOLE:DEF (set_tile "T1" (itoa HOLE:DEF)))
 (if SIZE:DEF (set_tile "S1" (itoa SIZE:DEF)))
 (action_tile "cancel" "(done_dialog)(setq userclick nil)")
 (action_tile "accept"
   (strcat
    "(progn
     (setq H:OLE (atoi (get_tile \"T1\")) HOLE:DEF H:OLE)"
    "(setq S:IZE (atoi (get_tile \"S1\")) SIZE:DEF S:IZE)"
    "(done_dialog)(setq userclick T))"))
 (start_dialog)
 (unload_dialog dcl_id)
 (if userclick
   (PRWMDIA_VARIABLE))
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; PRWMDIA_VARIABLE Function
;
(defun PRWMDIA_VARIABLE ()
 (progn
   (setq HOLE$ (fix H:OLE))
   (setq HOLE$ (nth H:OLE T1_list))
   (cond
     ((= HOLE$ "Type A"))
     ((= HOLE$ "Type B"))))
 (setq HOLE HOLE$)
 (progn 
   (setq SIZE$ (fix S:IZE))
   (setq SIZE$ (nth S:IZE S1_list))
   (cond
     ((= SIZE$  "300mm")(setq SIZE$  "300D"))
     ((= SIZE$  "250mm")(setq SIZE$  "250D"))
     ((= SIZE$  "200mm")(setq SIZE$  "200D"))
     ((= SIZE$  "150mm")(setq SIZE$  "150D"))
     ((= SIZE$  "100mm")(setq SIZE$  "100D"))))
 (setq SIZE SIZE$) 
 (PRWMDIA_OUTPUT)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; PRWMDIA_OUTPUT Function
;
(defun PRWMDIA_OUTPUT ()
 (if (null (tblsearch "STYLE" "CCC_Services"))
   (entmake
     (list
       (cons 0 "STYLE")
       (cons 100 "AcDbSymbolTableRecord")
       (cons 100 "AcDbTextStyleTableRecord")
       (cons 2 "CCC_Services")
       (cons 3 "Verdana.ttf")
       (cons 40 0)
       (cons 70 0))))
 (setq a  (strcat "CCC_WM_"SIZE"_"HOLE)
       b  (strcat "CCC_SERVICES_PROPOSED_Watermain_Ductile_Iron_"SIZE"_"HOLE)
       lw 30)
 (if (null (tblsearch "LTYPE" a))
   (command "_.-linetype" "_l" a "CCC_Watermain_DI.lin" ""))
 (if (null (tblsearch "LAYER" b))
 (command "_.-layer" "_N" b "_M" b "_L" a b "_C" "30" b "_LW" "0.3" b "" ))
 (command "_-color"  "bylayer")
 (command "._-linetype"  "s"  "bylayer" "")    
 (setvar "cmdecho" 0)
 (setvar "angbase" 0.0000)
 (setvar "angdir"  0)
 (setvar "orthomode" 0)
 (setvar "osmode"    16383)
 (command "_.-layer" "_S" b "")
 (setvar "plinegen" 1)
 (command "._pline")
 (PRWMDIA_RESTORE)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////
;
; Degrees to Radians Function
;
(defun PRWMDIA_DTR (DEGREES)
(* pi (/ DEGREES 180.0)))
;
;//////////////////////////////////////////////////////////////////////////
;
; Radians to Degrees Function
;
(defun PRWMDIA_RTD (RADIANS)
 (* 180.0 (/ RADIANS pi)))
;
;//////////////////////////////////////////////////////////////////////////
;
; Restore User Settings Function.
;
(defun PRWMDIA_RESTORE ()
 (setq *error* TERR$)
[color="red"]  (mapcar 'setvar SUS_LIST SUS)[/color]
 (princ "\nProgram completed and will now restore the user settings and exit.")
 (princ))
;
;/////////////////////////////////////////////////////////////////////////////
;
; Error Trap Function.
;
(defun PRWMDIA_ETRAP (ERRORMSG)
 (command nil nil nil)
 (if (not (member ERRORMSG '("console break" "Function cancelled")))
   (princ (strcat "\nError:" ERRORMSG)))
 (if SUS (mapcar 'setvar SUS_LIST SUS))
 (princ "\nAn *error* has occured!")
 (princ "\nThe program will now restore the user settings and exit.")
 (terpri)
 (setq *error* TERR$)
 (princ))
;
;//////////////////////////////////////////////////////////////////////////

 

I have looked at the command line dump after running the command and it looks as if the program is completing before the pline command is run.

Enter name list of layers(s) for lineweight 0.30mm 
<CCC_SERVICES_PROPOSED_Watermain_Ductile_Iron_300D_Type A>: 
CCC_SERVICES_PROPOSED_Watermain_Ductile_Iron_300D_Type A Enter an option 
[?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Fre
eze/Thaw/LOck/Unlock/stAte/Description/rEconcile]:
Command: _-color
Enter default object color [Truecolor/COlorbook] <BYLAYER>: bylayer
Command: ._-linetype
Current line type:  "ByLayer"
Enter an option [?/Create/Load/Set]: s
Specify linetype name or [?] <ByLayer>: bylayer
Enter an option [?/Create/Load/Set]:
Command:
Program completed and will now restore the user settings and exit.

Specify start point:
Current line-width is 0.000
Specify next point or [Arc/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:

 

Would appreciate your help again. Thanks.

Link to comment
Share on other sites

woodman78,

 

you have the closing parenthesis in the wrong place.

 

(setq SUS_list '(cmdecho orthomode osmode blipmode clayer angbase angdir cecolor))

SUS (mapcar 'getvar SUS_list)

TERR$ *error*

*error* PRWMDIA_ETRAP

Should be;

(setq SUS_list '(cmdecho orthomode osmode blipmode clayer angbase angdir cecolor)

SUS (mapcar 'getvar SUS_list)

TERR$ *error*

*error* PRWMDIA_ETRAP)

Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...