Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - John Spikowski

Pages: 1 ... 3 4 [5] 6 7 ... 14
61
BBC BASIC / Re: BBC BASIC for SDL 2.0 version 1.09a released
« on: January 18, 2020, 06:16:29 PM »
Great to hear you're approaching production stable status.

ScriptBasic core hasn't changed since 2005.

 If I don't see more members joining the forums I facilitate,  I may put the $130 a month I spend for a AWS server to better use and move everything to GitLab.

62
BBC BASIC / Re: BBC BASIC for SDL 2.0 version 1.09a released
« on: January 18, 2020, 08:25:06 AM »
Thanks Richard for the update!

Glad you're hanging in there keeping BASIC in the forefront.

63
Programming Challenges / Re: GUI Login
« on: January 03, 2020, 02:38:56 AM »
Nim Update

I had to rename the db_sqlite open/close procs to sqlopen/sqlclose to prevent a naming conflict with niup.

Code: Text
  1. # Nim 1.0.4 / IUP 3.28 - Login - JRS
  2.  
  3. import niup
  4. import niupext
  5. import db_sqlite
  6. import os
  7. import md5
  8.  
  9. var initdb:bool = existsFile("user.db")
  10. let usrdb = sqlopen("user.db", "", "", "")
  11. if initdb == false:
  12.   usrdb.exec(sql"CREATE TABLE user (UserID VARCHAR NOT NULL, Password VARCHAR NOT NULL, CONSTRAINT user_pk PRIMARY KEY (UserID));")
  13.  
  14. var uidtxt,showpwd,pwdtxt1,pwdtxt2,errlbl,zbtxt,newusr,loginbut:PIhandle
  15. var newusr_cb:string
  16.  
  17. proc Init_Form() =
  18.   Hide(errlbl)
  19.   SetAttribute(uidtxt, "VALUE", "")
  20.   SetAttribute(pwdtxt1, "VALUE", "")
  21.   SetAttribute(pwdtxt2, "VALUE", "")
  22.   SetAttribute(showpwd, "VALUE", "OFF")
  23.   SetAttribute(newusr, "VALUE", "OFF")
  24.   SetAttribute(zbtxt, "VALUE", "pwdtxt1")
  25.   SetAttribute(loginbut, "TITLE", "Login")
  26.   newusr_cb = "OFF"
  27.   SetFocus(uidtxt)
  28.  
  29. proc login_clicked(ih:PIhandle):cint {.cdecl.}=
  30.   var uid:cstring
  31.   var pswd:cstring
  32.   uid = GetAttribute(uidtxt,"VALUE")
  33.   if GetAttribute(showpwd, "VALUE") == "OFF":
  34.     pswd = GetAttribute(pwdtxt1,"VALUE")
  35.   else:
  36.     pswd = GetAttribute(pwdtxt2,"VALUE")
  37.   # *** NEW USER ***
  38.   if newusr_cb == "ON":
  39.     if uid != "" and pswd != "":
  40.       let rtnmsg = usrdb.tryInsertId(sql"INSERT INTO user (UserID, Password) VALUES (?, ?)", uid, getMD5($pswd))
  41.       if rtnmsg == -1:
  42.         SetAttribute(errlbl, "TITLE", "Duplicate User ID")
  43.         Show(errlbl)
  44.         SetFocus(uidtxt)
  45.         return IUP_DEFAULT
  46.       Message("Login",  "User Added")
  47.       Init_Form()
  48.       return
  49.     else:
  50.       Show(errlbl)
  51.       SetFocus(uidtxt)
  52.       return IUP_DEFAULT
  53.  
  54.   # *** LOGIN VERIFY ***
  55.   SetAttribute(errlbl, "TITLE", "User ID / Password Incorrect")
  56.   let dbpw = usrdb.getValue(sql"SELECT Password FROM user WHERE UserID=?", uid)
  57.   if dbpw != "":
  58.     if dbpw == getMD5($pswd):
  59.       Hide(errlbl)
  60.       Message("Login",  "Login Successful")
  61.       Init_Form()
  62.       return IUP_DEFAULT
  63.   Show(errlbl)
  64.   SetFocus(uidtxt)
  65.   return IUP_DEFAULT
  66.  
  67. proc show_password(ih:PIhandle; state: bool):cint {.cdecl.}=
  68.   var pwd1,pwd2:cstring
  69.   if state:
  70.     pwd1 = GetAttribute(pwdtxt1,"VALUE")
  71.     SetAttribute(pwdtxt2, "VALUE", pwd1)
  72.     SetAttribute(zbtxt, "VALUE", "pwdtxt2")
  73.   else:
  74.     pwd2 = GetAttribute(pwdtxt2,"VALUE")
  75.     SetAttribute(pwdtxt1, "VALUE", pwd2)
  76.     SetAttribute(zbtxt, "VALUE", "pwdtxt1")
  77.     return IUP_DEFAULT
  78.  
  79. proc new_user(ih:PIhandle; state: bool):cint {.cdecl.}=
  80.   if state:
  81.     newusr_cb = "ON"
  82.     SetAttribute(loginbut, "TITLE", "Add User")
  83.   else:
  84.     newusr_cb = "OFF"
  85.     SetAttribute(loginbut, "TITLE", "Login")
  86.   return IUP_DEFAULT
  87.  
  88. # *** MAIN ***
  89.  
  90. Open()
  91.  
  92. # *** DIALOG ***
  93. var dlg = Create("dialog")
  94. SetAttributes(dlg,
  95.   "TITLE=\"Login\", " &
  96.   "SIZE=200x200, " &
  97.   "MAXBOX=NO, " &
  98.   "MINBOX=NO, " &
  99.   "RESIZE=NO, " &
  100.   "DEFAULTENTER=\"loginbut\"")
  101.  
  102. # *** CONTAINER ***
  103. var vb = Create("vbox")
  104.  
  105. # *** IMAGE ***
  106. var hb1 = Create("hbox")
  107. var piclbl = Create("label")
  108. SetAttributes(piclbl,
  109.   "IMAGE=\"login.png\", " &
  110.   "EXPAND=HORIZONTAL, " &
  111.   "ALIGNMENT=ACENTER:ATOP")
  112. discard Append(hb1, piclbl)
  113. discard Append(vb, hb1)
  114.  
  115. # *** ERROR ***
  116. var hb2 = Create("hbox")
  117. errlbl = Create("label")
  118. SetAttributes(errlbl,
  119.   "TITLE=\"User ID / Password Incorrect\", " &
  120.   "FGCOLOR=\"#ff0000\", " &
  121.   "EXPAND=HORIZONTAL, " &
  122.   "ALIGNMENT=ACENTER")
  123. Hide(errlbl)
  124. discard Append(hb2, errlbl)
  125. discard Append(vb, hb2)
  126.  
  127. # *** ENTRY ***
  128. var hb3 = Create("hbox")
  129. SetAttributes(hb3,
  130.   "MARGIN=20x10, " &
  131.   "GAP=5")
  132. var vb1 = Create("vbox")
  133. SetAttribute(vb1, "GAP", "15")
  134. var uidlbl = Create("label")
  135. SetAttribute(uidlbl, "TITLE", "User ID")
  136. discard Append(vb1, uidlbl)
  137. var pwdlbl = Create("label")
  138. SetAttribute(pwdlbl, "TITLE", "Password")
  139. discard Append(vb1, pwdlbl)
  140. discard Append(hb3, vb1)
  141. var vb2 = Create("vbox")
  142. uidtxt = Create("text")
  143. SetAttribute(uidtxt, "SIZE", "85x")
  144. discard Append(vb2, uidtxt)
  145. pwdtxt1 = Create("text")
  146. SetAttributes(pwdtxt1,
  147.   "PASSWORD=YES, " &
  148.   "SIZE=85x")
  149. pwdtxt2 = Create("text")
  150. SetAttribute(pwdtxt2, "SIZE", "85x")
  151. SetHandle("pwdtxt1", pwdtxt1)
  152. SetHandle("pwdtxt2", pwdtxt2)
  153. zbtxt = Zbox(pwdtxt1, pwdtxt2, nil)
  154. SetHandle("zbtxt", zbtxt)
  155. discard Append(vb2, zbtxt)
  156. discard Append(hb3, vb2)
  157. discard Append(vb, hb3)
  158.  
  159. # *** SHOW/HIDE ***
  160. var hb4 = Create("hbox")
  161. SetAttributes(hb4,
  162.   "MARGIN=35x, " &
  163.   "GAP=40")
  164. showpwd = Create("toggle")
  165. SetAttributes(showpwd,
  166.   "TITLE=\"Show Password\", " &
  167.   "CANFOCUS=NO")
  168. newusr = Create("toggle")
  169. SetAttributes(newusr,
  170.   "TITLE=\"New User\", " &
  171.   "CANFOCUS=NO")
  172. discard Append(hb4, showpwd)
  173. discard Append(hb4, newusr)
  174. discard Append(vb, hb4)
  175.  
  176. # *** LOGIN ***
  177. var hb5 = Create("hbox")
  178. SetAttribute(hb5, "MARGIN", "40x10")
  179. loginbut = Create("button")
  180. SetAttributes(loginbut,
  181.   "TITLE=\"Login\", " &
  182.   "EXPAND=HORIZONTAL")
  183. SetHandle("loginbut", loginbut)
  184. discard Append(hb5, loginbut)
  185. discard Append(vb, hb5)
  186.  
  187. # *** ATTACH CONTAINER ***
  188. discard Append(dlg, vb)
  189.  
  190. # *** CALLBACKS ***
  191. SetCallback(loginbut, "ACTION", login_clicked)
  192. SetCallback(showpwd, "ACTION", show_password)
  193. SetCallback(newusr, "ACTION", new_user)
  194.  
  195. # *** PROCESS ***
  196. Show(dlg)
  197. MainLoop()
  198. sqlclose(usrdb)
  199. Close()
  200.  


ubuntu@rpi4b:~/guilc/nim-dev$ scriba showdb.sb
John   -   0b7efaa91a48ccd6c1dd58e3d69ea1a0
AIR   -   4de6ff4050222c488aa16286c39a605b
ubuntu@rpi4b:~/guilc/nim-dev$


Note: The screenshots are the same as the latest ScriptBasic submission.


64
Programming Challenges / Re: GUI Login
« on: December 31, 2019, 10:15:55 PM »
ScriptBasic Update

This version adds Jalih's suggestion of maintaining a database of UserID and Password (encrypted) as an extension to the base challenge.

Change Log
  • Added check for duplicate UserID's. 12/31
  • Fixed MD5 hex string to be a constant 32 bytes. 12/31
  • Reset error message to login error after a duplicate user add. 1/1

Code: Script BASIC
  1. ' ScriptBasic / IUP - Login - JRS
  2.  
  3. IMPORT iup.bas
  4. IMPORT sqlite.bas
  5. DECLARE SUB MD5 ALIAS "md5fun" LIB "t"
  6.  
  7. initdb = FILELEN("user.db")
  8. usrdb = sqlite::open("user.db")
  9. IF initdb = 0 THEN
  10.   sqlite::execute(usrdb,"CREATE TABLE user (" & _
  11.     "UserID VARCHAR NOT NULL, " & _
  12.     "Password VARCHAR NOT NULL, " & _
  13.     "CONSTRAINT user_pk PRIMARY KEY (UserID));")
  14. END IF
  15.  
  16. SUB login_clicked
  17.   uid = Iup::GetAttribute(uidtxt,"VALUE")
  18.   IF Iup::GetAttribute(showpwd, "VALUE") = "OFF" THEN
  19.     pwd = Iup::GetAttribute(pwdtxt1,"VALUE")
  20.   ELSE
  21.     pwd = Iup::GetAttribute(pwdtxt2,"VALUE")
  22.   END IF
  23.   ' *** NEW USER ***
  24.  IF newusr_cb = "ON" THEN
  25.     IF uid <> "" AND pwd <> "" THEN
  26.       rtnmsg = sqlite::execute(usrdb,"INSERT INTO user VALUES ('" & uid & "', '" & MD5STR(pwd) & "');")
  27.       IF rtnmsg = 19 THEN
  28.         Iup::SetAttribute errlbl, "TITLE", "Duplicate User ID"
  29.         Iup::Show errlbl
  30.         Iup::SetFocus uidtxt
  31.         EXIT SUB
  32.       END IF
  33.       Iup::Message "Login",  "User Added"
  34.       GOSUB Init_Form
  35.       EXIT SUB
  36.     ELSE
  37.       Iup::Show errlbl
  38.       Iup::SetFocus uidtxt
  39.       EXIT SUB
  40.     END IF
  41.   END IF
  42.   ' *** LOGIN VERIFY ***
  43.  Iup::SetAttribute errlbl, "TITLE", "User ID / Password Incorrect"
  44.   stmt = sqlite::query(usrdb,"SELECT Password FROM user WHERE UserID = '" & uid & "';")
  45.   IF sqlite::row(stmt) = sqlite::SQLITE3_ROW THEN
  46.     sqlite::fetchhash(stmt, col)
  47.     IF col{"Password"} = MD5STR(pwd) THEN
  48.       Iup::Hide errlbl
  49.       Iup::Message "Login",  "Login Successful"
  50.       GOSUB Init_Form
  51.       EXIT SUB
  52.     END IF
  53.   END IF
  54.   Iup::Show errlbl
  55.   Iup::SetFocus uidtxt
  56.   EXIT SUB
  57.   Init_Form:
  58.     Iup::Hide errlbl
  59.     Iup::SetAttribute uidtxt, "VALUE", ""
  60.     Iup::SetAttribute pwdtxt1, "VALUE", ""
  61.     Iup::SetAttribute pwdtxt2, "VALUE", ""
  62.     Iup::SetAttribute showpwd, "VALUE", "OFF"
  63.     Iup::SetAttribute newusr, "VALUE", "OFF"
  64.     Iup::SetAttribute zbtxt, "VALUE", "pwdtxt1"
  65.     Iup::SetAttribute loginbut, "TITLE", "Login"
  66.     newusr_cb = "OFF"
  67.     Iup::SetFocus uidtxt
  68.   RETURN
  69. END SUB
  70.  
  71. FUNCTION MD5STR(txtstr)
  72.   LOCAL tmpstr, hexstr, x
  73.   tmpstr = MD5(txtstr)
  74.   FOR x = 1 TO 16
  75.     hexstr &= RIGHT("0" & HEX(ASC(MID(tmpstr, x, 1))), 2)
  76.   NEXT
  77.   MD5STR = hexstr
  78. END FUNCTION
  79.  
  80. SUB show_password
  81.   IF Iup::GetAttribute(showpwd, "VALUE") = "OFF" THEN
  82.     pwd2 = Iup::GetAttribute(pwdtxt2,"VALUE")
  83.     Iup::SetAttribute pwdtxt1, "VALUE", pwd2
  84.     Iup::SetAttribute zbtxt, "VALUE", "pwdtxt1"
  85.   ELSE
  86.     pwd1 = Iup::GetAttribute(pwdtxt1,"VALUE")
  87.     Iup::SetAttribute pwdtxt2, "VALUE", pwd1
  88.     Iup::SetAttribute zbtxt, "VALUE", "pwdtxt2"
  89.   END IF
  90. END SUB
  91.  
  92. SUB new_user
  93.   newusr_cb =Iup::GetAttribute(newusr, "VALUE")
  94.   IF newusr_cb = "ON" THEN
  95.     Iup::SetAttribute loginbut, "TITLE", "Add User"
  96.   ELSE
  97.     Iup::SetAttribute loginbut, "TITLE", "Login"
  98.   END IF
  99. END SUB  
  100.  
  101. SUB Win_exit
  102.   Iup::ExitLoop = TRUE
  103. END SUB
  104.  
  105. ' *** DIALOG ***
  106. Iup::Open
  107. dlg = Iup::Create("dialog")
  108. Iup::SetAttributes dlg, _
  109.   "TITLE=\"Login\", " & _
  110.   "SIZE=200x200, " & _
  111.   "MAXBOX=NO, " & _
  112.   "MINBOX=NO, " & _
  113.   "RESIZE=NO, " & _
  114.   "DEFAULTENTER=\"loginbut\""
  115.  
  116. ' *** CONTAINER ***
  117. vb = Iup::Create("vbox")
  118.  
  119. ' *** IMAGE ***
  120. hb1 = Iup::Create("hbox")
  121. piclbl = Iup::Create("label")
  122. Iup::SetAttributes piclbl, _
  123.   "IMAGE=\"./login.png\", " & _
  124.   "EXPAND=HORIZONTAL, " & _
  125.   "ALIGNMENT=ACENTER:ATOP"
  126. Iup::Append hb1, piclbl
  127. Iup::Append vb, hb1
  128.  
  129. ' *** ERROR ***
  130. hb2 = Iup::Create("hbox")
  131. errlbl = Iup::Create("label")
  132. Iup::SetAttributes errlbl, _
  133.   "TITLE=\"User ID / Password Incorrect\", " & _
  134.   "FGCOLOR=\"#ff0000\", " & _
  135.   "EXPAND=HORIZONTAL, " & _
  136.   "ALIGNMENT=ACENTER"
  137. Iup::Hide errlbl
  138. Iup::Append hb2, errlbl
  139. Iup::Append vb, hb2
  140.  
  141. ' *** ENTRY ***
  142. hb3 = Iup::Create("hbox")
  143. Iup::SetAttributes hb3, _
  144.   "MARGIN=20x10, " & _
  145.   "GAP=5"
  146. vb1 = Iup::Create("vbox")
  147. Iup::SetAttribute vb1, "GAP", "15"
  148. uidlbl = Iup::Create("label")
  149. Iup::SetAttribute uidlbl, "TITLE", "User ID"
  150. Iup::Append vb1, uidlbl
  151. pwdlbl = Iup::Create("label")
  152. Iup::SetAttribute pwdlbl, "TITLE", "Password"
  153. Iup::Append vb1, pwdlbl
  154. Iup::Append hb3, vb1
  155. vb2 = Iup::Create("vbox")
  156. uidtxt = Iup::Create("text")
  157. Iup::SetAttribute uidtxt, "SIZE", "85x"
  158. Iup::Append vb2, uidtxt
  159. pwdtxt1 = Iup::Create("text")
  160. Iup::SetAttributes pwdtxt1, _
  161.   "PASSWORD=YES, " & _
  162.   "SIZE=85x"
  163. pwdtxt2 = Iup::Create("text")
  164. Iup::SetAttribute pwdtxt2, "SIZE", "85x"
  165. Iup::SetHandle "pwdtxt1", pwdtxt1
  166. Iup::SetHandle "pwdtxt2", pwdtxt2
  167. zbtxt = Iup::Zbox(pwdtxt1, pwdtxt2)
  168. Iup::SetHandle "zbtxt", zbtxt
  169. Iup::Append vb2, zbtxt
  170. Iup::Append hb3, vb2
  171. Iup::Append vb, hb3
  172.  
  173. ' *** SHOW/HIDE ***
  174. hb4 = Iup::Create("hbox")
  175. Iup::SetAttributes hb4, _
  176.  "MARGIN=35x, " & _
  177.  "GAP=40"
  178. showpwd = Iup::Create("toggle")
  179. Iup::SetAttributes showpwd, _
  180.   "TITLE=\"Show Password\", " & _
  181.   "CANFOCUS=NO"
  182. newusr = Iup::Create("toggle")
  183. Iup::SetAttributes newusr, _
  184.   "TITLE=\"New User\", " & _
  185.   "CANFOCUS=NO"
  186. Iup::Append hb4, showpwd
  187. Iup::Append hb4, newusr
  188. Iup::Append vb, hb4
  189.  
  190. ' *** LOGIN ***
  191. hb5 = Iup::Create("hbox")
  192. Iup::SetAttribute hb5, "MARGIN", "40x10"
  193. loginbut = Iup::Create("button")
  194. Iup::SetAttributes loginbut, _
  195.   "TITLE=\"Login\", " & _
  196.   "EXPAND=HORIZONTAL"
  197. Iup::SetHandle "loginbut", loginbut
  198. iup::Append hb5, loginbut
  199. iup::Append vb, hb5
  200.  
  201. ' *** ATTACH CONTAINER ***
  202. iup::Append  dlg, vb
  203.  
  204. ' *** CALLBACKS ***
  205. Iup::SetCallback dlg,"CLOSE_CB",ADDRESS(Win_exit())
  206. Iup::SetCallback loginbut, "ACTION", ADDRESS(login_clicked())
  207. Iup::SetCallback showpwd, "ACTION", ADDRESS(show_password())
  208. Iup::SetCallback newusr, "ACTION", ADDRESS(new_user())
  209.  
  210. ' *** PROCESS ***
  211. ' Iup::Show(Iup::LayoutDialog(dlg))
  212. Iup::Show(dlg)
  213. Iup::MainLoop
  214. Iup::Close
  215. sqlite::Close(usrdb)
  216.  


ubuntu@rpi4b:~/guilc/sb-dev$ scriba showdb.sb
John  -  FAF43E604E6A820CAAAB88BF7E2328C7
AIR   -  99B69173F38EB9F24FA4C05B4BE47CD7
Jalih -  78020D21C627349463D88142DC51F9B9
Peter -  0C5213856A47300D1E6D30CA00FAFFC1
ubuntu@rpi4b:~/guilc/sb-dev$




65
Programming Challenges / Re: GUI Login
« on: December 31, 2019, 03:03:38 AM »
It turns out my .bmp image needed to be 24 bit color depth. The conversion from .png to .bmp didn't maintain the transparency of the background.

I also learned how to create Windows executables rather than default console apps.

nim --app:gui c login.nim

I'm going to start a thread on AllBASIC for the Windows / Nim / IUP direction. Maybe Mike will show some interest.




66
Programming Challenges / Re: GUI Login
« on: December 31, 2019, 12:57:34 AM »
I had a little better luck with ScriptBasic and IUP. I still can't get the image to  show even by making a .bmp file of it. The IUP I'm running is pretty old so I'm  going to update to 3.28 and see if that helps.

67
Programming Challenges / Re: GUI Login
« on: December 30, 2019, 11:41:22 PM »
I wanted to try Nim / IUP on Windows 10 and I was able to get the login.nim to compile. I seem to be having a problem getting the image to load.

68
Programming Challenges / Re: GUI Login
« on: December 30, 2019, 06:39:37 AM »
You can create your dialog layout using the IupLayoutDialog() function in realtime. I use it to experiment with attributes (properties) without having to change/create any code. The function also will generate the code for your layout in C, Lua or LED.



69
Programming Challenges / Re: GUI Login
« on: December 30, 2019, 05:38:42 AM »
This is how IUP sees its layout via the IupLayoutDialog() function.

70
Programming Challenges / Re: GUI Login
« on: December 29, 2019, 04:50:09 AM »
Nim / IUP Update

Change Log
  • Used state of toggle from callback rather than using GetAttriute to obtain it.
  • Defaulted the ENTER key to click the  Login button.
Note: I've attached the login.png  used in the login program if someone would like to try the script on  their system.

Code: Text
  1. # Nim 1.0.4 / IUP 3.28 - Login - JRS
  2.  
  3. import niup
  4. import niupext
  5.  
  6. var uidtxt,showpwd,pwdtxt1,pwdtxt2,errlbl,zbtxt:PIhandle
  7.  
  8. proc login_clicked(ih:PIhandle):cint {.cdecl.}=
  9.   var uid,pswd:cstring
  10.   uid = GetAttribute(uidtxt,"VALUE")
  11.   if GetAttribute(showpwd, "VALUE") == "OFF":
  12.     pswd = GetAttribute(pwdtxt1,"VALUE")
  13.   else:
  14.     pswd = GetAttribute(pwdtxt2,"VALUE")
  15.  
  16.   if uid == "John" and pswd == "Spikowski":
  17.     Hide(errlbl)
  18.     Message("Login",  "Login Successful")
  19.     return IUP_CLOSE
  20.   else:
  21.     Show(errlbl)
  22.     SetFocus(uidtxt)
  23.     return IUP_DEFAULT
  24.  
  25. proc show_password(ih:PIhandle; state: bool):cint {.cdecl.}=
  26.   var pwd1,pwd2:cstring
  27.   if state:  
  28.     pwd1 = GetAttribute(pwdtxt1,"VALUE")
  29.     SetAttribute(pwdtxt2, "VALUE", pwd1)
  30.     SetAttribute(zbtxt, "VALUE", "pwdtxt2")
  31.   else:
  32.     pwd2 = GetAttribute(pwdtxt2,"VALUE")
  33.     SetAttribute(pwdtxt1, "VALUE", pwd2)
  34.     SetAttribute(zbtxt, "VALUE", "pwdtxt1")
  35.     return IUP_DEFAULT
  36.  
  37. # *** MAIN ***
  38.  
  39. Open()
  40.  
  41. # *** DIALOG ***
  42. var dlg = Create("dialog")
  43. SetAttributes(dlg,
  44.   "TITLE=\"Login\", " &
  45.   "SIZE=200x200, " &
  46.   "MAXBOX=NO, " &
  47.   "MINBOX=NO, " &
  48.   "RESIZE=NO, " &
  49.   "DEFAULTENTER=\"loginbut\"")
  50.  
  51. # *** CONTAINER ***
  52. var vb = Create("vbox")
  53.  
  54. # *** IMAGE ***
  55. var hb1 = Create("hbox")
  56. var piclbl = Create("label")
  57. SetAttributes(piclbl,  
  58.   "IMAGE=\"login.png\", " &
  59.   "EXPAND=HORIZONTAL, " &
  60.   "ALIGNMENT=ACENTER:ATOP")
  61. discard Append(hb1, piclbl)
  62. discard Append(vb, hb1)
  63.  
  64. # *** ERROR ***
  65. var hb2 = Create("hbox")
  66. errlbl = Create("label")
  67. SetAttributes(errlbl,
  68.   "TITLE=\"User ID / Password Incorrect\", " &
  69.   "FGCOLOR=\"#ff0000\", " &
  70.   "EXPAND=HORIZONTAL, " &
  71.   "ALIGNMENT=ACENTER")
  72. Hide(errlbl)
  73. discard Append(hb2, errlbl)
  74. discard Append(vb, hb2)
  75.  
  76. # *** ENTRY ***
  77. var hb3 = Create("hbox")
  78. SetAttributes(hb3,
  79.   "MARGIN=20x10, " &
  80.   "GAP=5")
  81. var vb1 = Create("vbox")
  82. SetAttribute(vb1, "GAP", "15")
  83. var uidlbl = Create("label")
  84. SetAttribute(uidlbl, "TITLE", "User ID")
  85. discard Append(vb1, uidlbl)
  86. var pwdlbl = Create("label")
  87. SetAttribute(pwdlbl, "TITLE", "Password")
  88. discard Append(vb1, pwdlbl)
  89. discard Append(hb3, vb1)
  90. var vb2 = Create("vbox")
  91. uidtxt = Create("text")
  92. SetAttribute(uidtxt, "SIZE", "85x")
  93. discard Append(vb2, uidtxt)
  94. pwdtxt1 = Create("text")
  95. SetAttributes(pwdtxt1,
  96.   "PASSWORD=YES, " &
  97.   "SIZE=85x")
  98. pwdtxt2 = Create("text")
  99. SetAttribute(pwdtxt2, "SIZE", "85x")
  100. SetHandle("pwdtxt1", pwdtxt1)
  101. SetHandle("pwdtxt2", pwdtxt2)
  102. zbtxt = Zbox(pwdtxt1, pwdtxt2, nil)
  103. SetHandle("zbtxt", zbtxt)
  104. discard Append(vb2, zbtxt)
  105. discard Append(hb3, vb2)
  106. discard Append(vb, hb3)
  107.  
  108. # *** SHOW/HIDE ***
  109. var hb4 = Create("hbox")
  110. SetAttribute(hb4, "MARGIN", "35x")
  111. showpwd = Create("toggle")
  112. SetAttributes(showpwd,
  113.   "TITLE=\"Show Password?\", " &
  114.   "CANFOCUS=NO")
  115. discard Append(hb4, showpwd)
  116. discard Append(vb, hb4)
  117.  
  118. # *** LOGIN ***
  119. var hb5 = Create("hbox")
  120. SetAttribute(hb5, "MARGIN", "40x10")
  121. var loginbut = Create("button")
  122. SetAttributes(loginbut,
  123.   "TITLE=\"Login\", " &
  124.   "EXPAND=HORIZONTAL")
  125. SetHandle("loginbut", loginbut)
  126. discard Append(hb5, loginbut)
  127. discard Append(vb, hb5)
  128.  
  129. # *** ATTACH CONTAINER ***
  130. discard Append(dlg, vb)
  131.  
  132. # *** CALLBACKS ***
  133. SetCallback(loginbut, "ACTION", login_clicked)
  134. SetCallback(showpwd, "ACTION", show_password)
  135.  
  136. # *** PROCESS ***
  137. Show(dlg)
  138. MainLoop()
  139. Close()
  140.  

The screen shots for Nim are identical to  the ones  posted for ScriptBasic.

71
Nim / Re: Nim Manual
« on: December 28, 2019, 06:32:51 PM »
I ran into another Nim language reference from MIT that is a good resource.

Nim Language Reference

72
Programming Challenges / Re: GUI Login
« on: December 28, 2019, 06:58:11 AM »
ScriptBasic Update

Change Log
  • Fixed hide/show password
  • Skip Show Password? checkbox in ZORDER
  • Removed dialog max / min titlebar buttons
  • ENTER key clicks the Login button
  • Optimize and tidy code.

Code: Script BASIC
  1. ' ScriptBasic / IUP - Login - JRS
  2.  
  3. IMPORT iup.bas
  4.  
  5. SUB login_clicked
  6.   uid = Iup::GetAttribute(uidtxt,"VALUE")
  7.   IF Iup::GetAttribute(showpwd, "VALUE") = "OFF" THEN
  8.     pwd = Iup::GetAttribute(pwdtxt1,"VALUE")
  9.   ELSE
  10.     pwd = Iup::GetAttribute(pwdtxt2,"VALUE")
  11.   END IF
  12.   IF uid = "John" AND pwd = "Spikowski" THEN
  13.     Iup::Hide errlbl
  14.     Iup::Message "Login",  "Login Successful"
  15.     Iup::ExitLoop = TRUE
  16.   ELSE
  17.     Iup::Show errlbl
  18.     Iup::SetFocus uidtxt
  19.   END IF
  20. END SUB
  21.  
  22. SUB show_password
  23.   IF Iup::GetAttribute(showpwd, "VALUE") = "OFF" THEN
  24.     pwd2 = Iup::GetAttribute(pwdtxt2,"VALUE")
  25.     Iup::SetAttribute pwdtxt1, "VALUE", pwd2
  26.     Iup::SetAttribute zbtxt, "VALUE", "pwdtxt1"
  27.   ELSE
  28.     pwd1 = Iup::GetAttribute(pwdtxt1,"VALUE")
  29.     Iup::SetAttribute pwdtxt2, "VALUE", pwd1
  30.     Iup::SetAttribute zbtxt, "VALUE", "pwdtxt2"
  31.   END IF
  32. END SUB
  33.  
  34. SUB Win_exit
  35.   Iup::ExitLoop = TRUE
  36. END SUB
  37.  
  38. ' *** DIALOG ***
  39. Iup::Open
  40. dlg = Iup::Create("dialog")
  41. Iup::SetAttributes dlg, _
  42.   "TITLE=\"Login\", " & _
  43.   "SIZE=200x200, " & _
  44.   "MAXBOX=NO, " & _
  45.   "MINBOX=NO, " & _
  46.   "RESIZE=NO, " & _
  47.   "DEFAULTENTER=\"loginbut\""
  48.  
  49. ' *** CONTAINER ***
  50. vb = Iup::Create("vbox")
  51.  
  52. ' *** IMAGE ***
  53. hb1 = Iup::Create("hbox")
  54. piclbl = Iup::Create("label")
  55. Iup::SetAttributes piclbl, _
  56.   "IMAGE=\"./login.png\", " & _
  57.   "EXPAND=HORIZONTAL, " & _
  58.   "ALIGNMENT=ACENTER:ATOP"
  59. Iup::Append hb1, piclbl
  60. Iup::Append vb, hb1
  61.  
  62. ' *** ERROR ***
  63. hb2 = Iup::Create("hbox")
  64. errlbl = Iup::Create("label")
  65. Iup::SetAttributes errlbl, _
  66.   "TITLE=\"User ID / Password Incorrect\", " & _
  67.   "FGCOLOR=\"#ff0000\", " & _
  68.   "EXPAND=HORIZONTAL, " & _
  69.   "ALIGNMENT=ACENTER"
  70. Iup::Hide errlbl
  71. Iup::Append hb2, errlbl
  72. Iup::Append vb, hb2
  73.  
  74. ' *** ENTRY ***
  75. hb3 = Iup::Create("hbox")
  76. Iup::SetAttributes hb3, _
  77.   "MARGIN=20x10, " & _
  78.   "GAP=5"
  79. vb1 = Iup::Create("vbox")
  80. Iup::SetAttribute vb1, "GAP", "15"
  81. uidlbl = Iup::Create("label")
  82. Iup::SetAttribute uidlbl, "TITLE", "User ID"
  83. Iup::Append vb1, uidlbl
  84. pwdlbl = Iup::Create("label")
  85. Iup::SetAttribute pwdlbl, "TITLE", "Password"
  86. Iup::Append vb1, pwdlbl
  87. Iup::Append hb3, vb1
  88. vb2 = Iup::Create("vbox")
  89. uidtxt = Iup::Create("text")
  90. Iup::SetAttribute uidtxt, "SIZE", "85x"
  91. Iup::Append vb2, uidtxt
  92. pwdtxt1 = Iup::Create("text")
  93. Iup::SetAttributes pwdtxt1, _
  94.   "PASSWORD=YES, " & _
  95.   "SIZE=85x"
  96. pwdtxt2 = Iup::Create("text")
  97. Iup::SetAttribute pwdtxt2, "SIZE", "85x"
  98. Iup::SetHandle "pwdtxt1", pwdtxt1
  99. Iup::SetHandle "pwdtxt2", pwdtxt2
  100. zbtxt = Iup::Zbox(pwdtxt1, pwdtxt2)
  101. Iup::SetHandle "zbtxt", zbtxt
  102. Iup::Append vb2, zbtxt
  103. Iup::Append hb3, vb2
  104. Iup::Append vb, hb3
  105.  
  106. ' *** SHOW/HIDE ***
  107. hb4 = Iup::Create("hbox")
  108. Iup::SetAttribute hb4, "MARGIN", "35x"
  109. showpwd = Iup::Create("toggle")
  110. Iup::SetAttributes showpwd, _
  111.   "TITLE=\"Show Password?\", " & _
  112.   "CANFOCUS=NO"
  113. Iup::Append hb4, showpwd
  114. Iup::Append vb, hb4
  115.  
  116. ' *** LOGIN ***
  117. hb5 = Iup::Create("hbox")
  118. Iup::SetAttribute hb5, "MARGIN", "40x10"
  119. loginbut = Iup::Create("button")
  120. Iup::SetAttributes loginbut, _
  121.   "TITLE=\"Login\", " & _
  122.   "EXPAND=HORIZONTAL"
  123. Iup::SetHandle "loginbut", loginbut
  124. iup::Append hb5, loginbut
  125. iup::Append vb, hb5
  126.  
  127. ' *** ATTACH CONTAINER ***
  128. iup::Append  dlg, vb
  129.  
  130. ' *** CALLBACKS ***
  131. Iup::SetCallback dlg,"CLOSE_CB",ADDRESS(Win_exit())
  132. Iup::SetCallback loginbut, "ACTION", ADDRESS(login_clicked())
  133. Iup::SetCallback showpwd, "ACTION", ADDRESS(show_password())
  134.  
  135. ' *** PROCESS ***
  136. Iup::Show dlg
  137. Iup::MainLoop
  138. Iup::Close
  139.  


73
Programming Challenges / Re: GUI Login
« on: December 27, 2019, 10:10:53 PM »
8th Update (Jalih submission)

Code: Text
  1. requires gui
  2.  
  3. var gui
  4.  
  5. { guest: "pa$$w0rd!" } constant passwords
  6.  
  7. : authenticate
  8.   "edit1" g:child g:text? passwords swap m:@ nip null? if
  9.     drop
  10.     "lbl0" g:child
  11.     "User not found!" g:text drop
  12.   else
  13.     swap
  14.     "edit2" g:child g:text? rot s:= if
  15.      "Authenticated!" . cr
  16.      bye
  17.     else
  18.       "lbl0" g:child
  19.       "Username and password don't match!" g:text drop
  20.     then
  21.   then ;
  22.  
  23. {
  24.   kind: "win",
  25.   buttons: 0,
  26.   native-title-bar: false,
  27.   title: "Login",
  28.   wide: 520,
  29.   high: 200,
  30.   resizable: false,
  31.   center: true,
  32.   init: ( gui ! ),
  33.   children:
  34.   [
  35.     {
  36.       kind: "box",
  37.       name: "frame",
  38.       bounds: "0, 0, parent.width, parent.height",
  39.       bg: "gray",
  40.       children:
  41.       [
  42.         {
  43.           kind: "image",
  44.           bounds: "parent.left+10, parent.top+10, left+128, top+128",
  45.           img: "8thlogo.png",
  46.           name: "logo"    
  47.         },
  48.         {
  49.           kind: "label",
  50.           fg: "blue",
  51.           font: 20,
  52.           label: "",
  53.           bounds: "logo.right+20, parent.top+10, parent.width-10, top+24 ",
  54.           justify: ["hcenter"],
  55.           name: "lbl0"
  56.         },
  57.         {
  58.           kind: "label",
  59.           label: "Username:",
  60.           bounds: "logo.right+20, lbl0.bottom+20, left+80, top+24 ",
  61.           name: "lbl1"
  62.         },
  63.         {
  64.           kind: "edit",
  65.           bounds: "lbl1.right+10, lbl1.top, parent.width-20, top+24",
  66.           name: "edit1",
  67.           max-text: 32
  68.         },
  69.         {
  70.           kind: "label",
  71.           label: "Password:",
  72.           bounds: "lbl1.left, lbl1.bottom+10, left+80, top+24",
  73.           name: "lbl2"
  74.         },
  75.         {
  76.           kind: "edit",
  77.           bounds: "edit1.left, lbl2.top, parent.width-20, top+24",
  78.           name: "edit2",
  79.           max-text: 32,
  80.           password-char: "*"
  81.         },
  82.         {
  83.           kind: "btn",
  84.           label: "Login",
  85.           bg: "darkgray",
  86.           bounds: "lbl2.left, lbl2.bottom+20, edit2.right, top+30",
  87.           name: "button",
  88.           tooltip: "Login to account",
  89.           click: ' authenticate
  90.         }
  91.       ]
  92.     }
  93.   ]
  94. } var, gui-desc
  95.  
  96. : app:main
  97.   gui-desc @ g:new ;
  98.  

74
Programming Challenges / Re: GUI Login
« on: December 27, 2019, 03:17:03 PM »
C Update (AIR submission)

Code: C
  1. * logon2.c
  2.  *
  3.  * version 1.1
  4.  *
  5.  * GUI Logon Screen Challenge Submission
  6.  * C version, using GTK+-3.0
  7.  *
  8.  * Written by Armando I. Rivera (AIR)
  9.  *
  10.  * Compile:  gcc logon2.c $(pkg-config --libs --cflags gtk+-3.0) -o logon2
  11. */
  12.  
  13.  
  14. #include <gtk/gtk.h>
  15.  
  16. GtkWidget *err_label;
  17.  
  18. void onClick( GtkWidget *widget, gpointer   data ) {
  19.     gchar *stupid_password = "pa$$w0rd!";
  20.     gchar *user_password;
  21.     g_object_get(data,"text",&user_password,NULL);
  22.  
  23.     if (g_strcmp0 (stupid_password,user_password) == 0) {
  24.         g_print("Your are now logged in!\n");
  25.         gtk_main_quit();
  26.     }else{
  27.         gtk_label_set_markup(GTK_LABEL(err_label), "<span color=\"red\" font_desc=\"16.0\">** Invalid Password **</span>");
  28.         g_print("Username or Password is Incorrect!\n");
  29.  
  30.     }
  31. }
  32.  
  33. int main( int argc, char *argv[])
  34. {
  35.     GtkWidget *window, *layout, *image, *btnLogin;
  36.     GtkWidget *lblUser, *lblPass, *txtUser, *txtPass;
  37.  
  38.     gtk_init(&argc, &argv);
  39.    
  40.     layout = gtk_layout_new(NULL, NULL);
  41.  
  42.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  43.     g_object_set(window,
  44.                 "title","Login",
  45.                 "default-width",660,
  46.                 "default-height",370,
  47.                 "resizable",FALSE,
  48.                 "window-position",GTK_WIN_POS_CENTER,
  49.                 "child",layout,
  50.                 "decorated",0,
  51.                 NULL);
  52.  
  53.  
  54.     image = gtk_image_new_from_file("logon.png");
  55.     g_object_set(layout,"child",image,"margin",10,NULL);
  56.    
  57.     lblUser = gtk_label_new("");
  58.     lblPass = gtk_label_new("");
  59.     err_label = gtk_label_new("");
  60.     g_object_set(err_label,"width-request",270,NULL);
  61.    
  62.     gtk_label_set_markup(GTK_LABEL(lblUser), "<span font_desc=\"16.0\">Username:</span>");
  63.     gtk_label_set_markup(GTK_LABEL(lblPass), "<span font_desc=\"16.0\">Password:</span>");
  64.    
  65.     txtUser = gtk_entry_new();
  66.     txtPass = gtk_entry_new();
  67.    
  68.    
  69.     g_object_set(txtPass,"visibility", FALSE,NULL);
  70.    
  71.     btnLogin = gtk_button_new_with_label("Login");
  72.     g_object_set(btnLogin,"width-request",170,NULL);
  73.  
  74.  
  75.     gtk_layout_put(GTK_LAYOUT(layout), lblUser, 330, 112);
  76.     gtk_layout_put(GTK_LAYOUT(layout), lblPass, 330, 162);
  77.     gtk_layout_put(GTK_LAYOUT(layout), txtUser, 460, 110);
  78.     gtk_layout_put(GTK_LAYOUT(layout), txtPass, 460, 160);
  79.     gtk_layout_put(GTK_LAYOUT(layout), btnLogin, 460, 210);
  80.     gtk_layout_put(GTK_LAYOUT(layout), err_label, 300, 16);
  81.  
  82.     g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
  83.     g_signal_connect (btnLogin, "clicked", G_CALLBACK (onClick), txtPass);
  84.  
  85.     gtk_widget_show_all(window);
  86.  
  87.     gtk_main();
  88.  
  89.     return 0;
  90. }
  91.  

75
Programming Challenges / Re: GUI Login
« on: December 27, 2019, 03:02:38 AM »
ScriptBasic

Code: Script BASIC
  1. ' ScriptBasic / IUP - Login - JRS
  2.  
  3. IMPORT iup.bas
  4.  
  5. SUB login_clicked
  6.   uid = Iup::GetAttribute(uidtxt,"VALUE")
  7.   pwd = Iup::GetAttribute(pwdtxt,"VALUE")
  8.   IF uid = "John" AND pwd = "Spikowski" THEN
  9.     Iup::Hide(errlbl)
  10.     Iup::Message("Login",  "Login Successful")
  11.     Iup::ExitLoop = TRUE
  12.   ELSE
  13.     Iup::Show(errlbl)
  14.     Iup::SetFocus(uidtxt)
  15.   END IF
  16. END SUB
  17.  
  18. SUB show_password
  19.   showcb = Iup::GetAttribute(showpwd, "VALUE")
  20.   IF showcb = "ON" THEN
  21.     Iup::SetAttribute(pwdtxt, "PASSWORD", "NO")
  22.   ELSE
  23.     Iup::SetAttribute(pwdtxt, "PASSWORD", "YES")
  24.   END IF
  25. END SUB
  26.  
  27. SUB Win_exit
  28.   Iup::ExitLoop = TRUE
  29. END SUB
  30.  
  31. Iup::Open()
  32. dlg = Iup::Create("dialog")
  33. Iup::SetAttributes(dlg, "TITLE=\"Login\", SIZE=200x200")
  34.  
  35. vb = Iup::Create("vbox")
  36. hb1 = Iup::Create("hbox")
  37. piclbl = Iup::Create("label")
  38. Iup::SetAttribute(piclbl, "IMAGE", "./login.png")
  39. Iup::SetAttribute(piclbl, "EXPAND", "HORIZONTAL")
  40. Iup::SetAttribute(piclbl, "ALIGNMENT", "ACENTER:ATOP")
  41. Iup::Append(hb1, piclbl)
  42. Iup::Append(vb, hb1)
  43.  
  44. hb2 = Iup::Create("hbox")
  45. errlbl = Iup::Create("label")
  46. Iup::SetAttribute(errlbl, "TITLE", "User ID / Password Incorrect")
  47. Iup::SetAttribute(errlbl, "FGCOLOR", "#ff0000")
  48. Iup::SetAttribute(errlbl, "EXPAND", "HORIZONTAL")
  49. Iup::SetAttribute(errlbl, "ALIGNMENT", "ACENTER")
  50. Iup::Hide(errlbl)
  51. Iup::Append(hb2, errlbl)
  52. Iup::Append(vb, hb2)
  53.  
  54. hb3 = Iup::Create("hbox")
  55. Iup::SetAttribute(hb3, "MARGIN", "20x10")
  56. Iup::SetAttribute(hb3, "GAP", "5")
  57. vb1 = Iup::Create("vbox")
  58. Iup::SetAttribute(vb1, "GAP", "15")
  59. uidlbl = Iup::Create("label")
  60. Iup::SetAttribute(uidlbl, "TITLE", "User ID")
  61. Iup::Append(vb1, uidlbl)
  62. pwdlbl = Iup::Create("label")
  63. Iup::SetAttribute(pwdlbl, "TITLE", "Password")
  64. Iup::Append(vb1, pwdlbl)
  65. Iup::Append(hb3, vb1)
  66. vb2 = Iup::Create("vbox")
  67. uidtxt = Iup::Create("text")
  68. Iup::SetAttribute(uidtxt, "SIZE", "85x")
  69. Iup::Append(vb2, uidtxt)
  70. pwdtxt = Iup::Create("text")
  71. Iup::SetAttribute(pwdtxt, "PASSWORD", "YES")
  72. Iup::SetAttribute(pwdtxt, "SIZE", "85x")
  73. Iup::Append(vb2, pwdtxt)
  74. Iup::Append(hb3, vb2)
  75. Iup::Append(vb, hb3)
  76.  
  77. hb4 = Iup::Create("hbox")
  78. Iup::SetAttribute(hb4, "MARGIN", "35x")
  79. showpwd = Iup::Create("toggle")
  80. Iup::SetAttribute(showpwd, "TITLE", "Show Password?")
  81. Iup::Append(hb4, showpwd)
  82. Iup::Append(vb, hb4)
  83.  
  84. hb5 = Iup::Create("hbox")
  85. Iup::SetAttribute(hb5, "MARGIN", "40x10")
  86. loginbut = Iup::Create("button")
  87. Iup::SetAttribute(loginbut, "TITLE", "Login")
  88. Iup::SetAttribute(loginbut, "EXPAND", "HORIZONTAL")
  89. iup::Append(hb5, loginbut)
  90. iup::Append(vb, hb5)
  91.  
  92. iup::Append(dlg, vb)
  93.  
  94. Iup::SetCallback(dlg,"CLOSE_CB",ADDRESS(Win_exit()))
  95. Iup::SetCallback(loginbut, "ACTION", ADDRESS(login_clicked()))
  96. Iup::SetCallback(showpwd, "ACTION", ADDRESS(show_password()))
  97.  
  98. Iup::Show(dlg)
  99. Iup::MainLoop()
  100. Iup::Close()
  101.  

Pages: 1 ... 3 4 [5] 6 7 ... 14