NB. ====(1/4)  name of application  =======

NB./*/APP_FOLDER_NAME/making_of_app_def_file_jconsole

NB. ====(2/4) HTML doc design =======

NB./*/HTML_TITLE/making_of_form_app_def_file
NB./*/HTML_REMARK/making of definition file for adding web GUI to your J function
NB.フォームを付けたいJ関数の引数,条件と関数自体が既に完成している必要があります。
NB./*/HORIZONTALLINE
NB./*/web server application storage folder name to be specified 
NB./*/TEXTBOX/90/VERTICAL/050/name of application folder /test_app
NB./*/TEXTBOX/91/VERTICAL/050/Title of HTML document/Your HTML Title
NB./*/TEXTBOX/92/VERTICAL/150/Description of HTML/Describe what this document is here
NB.
NB./*/HORIZONTALLINE
NB./*/please check of Form control(s) for assigning argument(s) in your J fucntion
NB./*/HORIZONTALLINE
NB./*/TEXTBOX max 3
NB./*/Form control Name Number, layout, column, label, value

NB./*/CHECKBOX/00/HORIZONTAL/ TEXTBOX_00/textbox_00

NB./*/DROPDOWN/00/HORIZONTAL/ /VERTICAL+VERTICAL/HORIZONTAL+HORIZONTAL
NB./*/TEXTBOX/00/HORIZONTAL/04/ /20
NB./*/TEXTBOX/01/HORIZONTAL/20/ /txt00Label 
NB./*/TEXTBOX/02/HORIZONTAL/20/ /txt00Value
NB./*/NEWLINE

NB./*/CHECKBOX/10/HORIZONTAL/ TEXTBOX_01/textbox_01

NB./*/DROPDOWN/10/HORIZONTAL/ /VERTICAL+VERTICAL/HORIZONTAL+HORIZONTAL
NB./*/TEXTBOX/10/HORIZONTAL/04/ /20
NB./*/TEXTBOX/11/HORIZONTAL/20/ /txt01Label 
NB./*/TEXTBOX/12/HORIZONTAL/20/ /txt01Value
NB./*/NEWLINE

NB./*/CHECKBOX/20/HORIZONTAL/ TEXTBOX_02/textbox_02

NB./*/DROPDOWN/20/HORIZONTAL/ /VERTICAL+VERTICAL/HORIZONTAL+HORIZONTAL
NB./*/TEXTBOX/20/HORIZONTAL/04/ /20
NB./*/TEXTBOX/21/HORIZONTAL/20/ /txt02Label 
NB./*/TEXTBOX/22/HORIZONTAL/20/ /tzt02Value
NB./*/NEWLINE
NB./*/NEWLINE

NB./*/TEXTAREA Max 1
NB./*/Form control Name Number, layout, column, row, label, value

NB./*/CHECKBOX/30/HORIZONTAL/ TEXTAREA_00/textarea_00

NB./*/DROPDOWN/30/HORIZONTAL/ /VERTICAL+VERTICAL/HORIZONTAL+HORIZONTAL
NB./*/TEXTBOX/30/HORIZONTAL/04/ /150
NB./*/TEXTBOX/31/HORIZONTAL/04/ /05
NB./*/TEXTBOX/32/HORIZONTAL/20/ /txa00Label 
NB./*/TEXTBOX/33/HORIZONTAL/20/ /txa00Value
NB./*/NEWLINE
NB./*/NEWLINE

NB./*/CHECKBOX Max 2
NB./*/Form control Name Number, layout, label, value

NB./*/CHECKBOX/40/HORIZONTAL/ CHECKBOX_00/checkbox_00

NB./*/DROPDOWN/40/HORIZONTAL/ /VERTICAL+VERTICAL/HORIZONTAL+HORIZONTAL
NB./*/TEXTBOX/40/HORIZONTAL/20/ /chk00Label 
NB./*/TEXTBOX/41/HORIZONTAL/20/ /chk00Value
NB./*/NEWLINE

NB./*/CHECKBOX/50/HORIZONTAL/ CHECKBOX_01/checkbox_01

NB./*/DROPDOWN/50/HORIZONTAL/ /VERTICAL+VERTICAL/HORIZONTAL+HORIZONTAL
NB./*/TEXTBOX/50/HORIZONTAL/20/ /chk01Label 
NB./*/TEXTBOX/51/HORIZONTAL/20/ /chk01Value
NB./*/NEWLINE
NB./*/NEWLINE

NB./*/DROPDOWN Max 1
NB./*/Form control Name Number, layout, Label, ItemLabel, Value,ItemLabel,Value,ItemLabel,Value

NB./*/CHECKBOX/60/HORIZONTAL/ DROPDOWN_00/dropdown_00

NB./*/DROPDOWN/60/HORIZONTAL/ /VERTICAL+VERTICAL/HORIZONTAL+HORIZONTAL
NB./*/TEXTBOX/60/HORIZONTAL/20/ /drp00ControlLabel 
NB./*/TEXTBOX/61/HORIZONTAL/20/ /drp001ItemLabel
NB./*/TEXTBOX/62/HORIZONTAL/20/ /drp001Value
NB./*/TEXTBOX/63/HORIZONTAL/20/ /drp002ItemLabel
NB./*/TEXTBOX/64/HORIZONTAL/20/ /drp002Value
NB./*/TEXTBOX/65/HORIZONTAL/20/ /drp003ItemLabel
NB./*/TEXTBOX/66/HORIZONTAL/20/ /drp003Value
NB./*/NEWLINE
NB./*/NEWLINE

NB./*/CHECKLIST Max 1
NB./*/Form control Name, Number, layout, Total of Items, Label,ItemLabel,Value,ItemLabel,Value,ItemLabel,Value

NB./*/CHECKBOX/70/HORIZONTAL/ CHECKLIST_00/checklist_00

NB./*/DROPDOWN/70/HORIZONTAL/ /VERTICAL+VERTICAL/HORIZONTAL+HORIZONTAL
NB./*/TEXTBOX/70/HORIZONTAL/04/ /3
NB./*/TEXTBOX/71/HORIZONTAL/20/ /chl00ControlLabel 
NB./*/TEXTBOX/72/HORIZONTAL/20/ /chl001ItemLabel
NB./*/TEXTBOX/73/HORIZONTAL/20/ /chl001Value
NB./*/TEXTBOX/74/HORIZONTAL/20/ /chl002ItemLabel
NB./*/TEXTBOX/75/HORIZONTAL/20/ /chl002Value
NB./*/TEXTBOX/76/HORIZONTAL/20/ /chl003ItemLabel
NB./*/TEXTBOX/77/HORIZONTAL/20/ /chl003Value
NB./*/NEWLINE
NB./*/NEWLINE

NB./*/RADIOBUTTON Max 1
NB./*/Form control name, number, layout,Label,ItemLabel,Value,ItemLabel,Value,ItemLabel,Value

NB./*/CHECKBOX/80/HORIZONTAL/ RADIOBUTTON_00/radiobutton_00

NB./*/DROPDOWN/80/HORIZONTAL/ /HORIZONTAL+HORIZONTAL/VERTICAL+VERTICAL
NB./*/TEXTBOX/80/HORIZONTAL/20/ /rad00ControlLabel 
NB./*/TEXTBOX/81/HORIZONTAL/20/ /rad001ItemLabel
NB./*/TEXTBOX/82/HORIZONTAL/20/ /rad001Value
NB./*/TEXTBOX/83/HORIZONTAL/20/ /rad002ItemLabel
NB./*/TEXTBOX/84/HORIZONTAL/20/ /rad002Value
NB./*/TEXTBOX/85/HORIZONTAL/20/ /rad003ItemLabel
NB./*/TEXTBOX/86/HORIZONTAL/20/ /rad003Value

NB./*/HORIZONTALLINE
NB./*/define your J function(s) in the following textarea
NB./*/TEXTAREA/00/HORIZONTAL/150/10/ /NB.define your J function(s) which will be used in YOUR_JOB function
NB./*/HORIZONTALLINE

NB./*/YOUR_JOB =: 3 : 0  try. block description 
NB./*/
NB./*/try. block is the place where you write actual job using j functions written in the section define your J function above, taking argument(s) from posted value(s), format the result of function as string stream and assign it to server response message variable: reply_msg so that jsocket can send result string text to the client
NB./*/
NB./*/The default server response message : reply_msg is 'there is no error in the execution of YOUR_JOB function'
NB./*/If there occurred an error in try. block, reply_msg is 'Error has occurred in YOUR_JOB function'
NB./*/
NB./*/Before going to try. block, the default process of extraction entryIDs value is executed as 'a_collection =. monitor_entry_ID_values 0'
NB./*/a_collection variable can be assigned to server response message: reply_msg to monitor client posting
NB./*/
NB./*/return value from your j function should be formatted as character strings with CRLF-ended line(s) and must be assigned to server reply message variable: reply_msg
NB./*/
NB./*/scalar and vector return can be formatted with ": function, but matrix and array of number or character should be formatted in one of the built in reformattng functions noted as below
NB./*/
NB./*/save_matrix_number_data_as_text_file
NB./*/save_array_number_data_as_text_file
NB./*/these two functions can be applied to matrix and array with either numbers or characters
NB./*/

NB.try.部の応答メッセージ reply_msg の初期Valueは「エラーなく処理されました」である。
NB.
NB.もし,エラーが発生した場合は catch.ブロックでデフォルトで設定されている「YOUR_JOB関数の処理過程でエラーが発生しました」がブラウザへ送られる。
NB.
NB.try.ブロックではフォームで送信された部品のValueを引数として関数を実行し,結果はブラウザにテキストとして送信できるように適宜の変換が必要である。
NB.
NB.デフォルト事前処理として「a_collection =. monitor_entry_ID_values 0」が実行され,クライアントから送られたValueがモニターされる。
NB.a_collection を応答メッセージ変数 reply_msgに設定すれば,開発過程でのクライアント入力データのモニターに使うことが可能である。
NB.
NB.文字列化された数Value（マトリックス,配列は行末にCRLFを付加して変換しなければならない）を,reply_msg にセットするとクライアントへ返送される。
NB.
NB.スカラー,ベクトルは ": で変換できるが,マトリックス,配列の場合は本システムにビルトインの変換関数
NB.save_matrix_number_data_as_text_file
NB.save_array_number_data_as_text_file
NB.を活用する。なお,この２つの関数は文字列マトリックス,文字列配列でも動作する。
NB.
NB.画像データを返す場合は応答画像ファイル response_image.bmp へ登録する。本システムにビルトインの変換関数を活用できる。
NB.
NB.Jturtle (j602a)で作図した画像は
NB.save_current_jturtle_window_as_bmp_file 0
NB.
NB.plot コマンドで作図した画像は
NB.save_current_plot_as_bmp_file 0
NB.
NB.で response_image.bmp へ保存される 保存後は wd 'pclose'も記述して閉じておく。
NB.
NB.try.部の応答メッセージ reply_msg の初期Valueは「エラーなく処理されました」である。
NB.
NB.もし,エラーが発生した場合は catch.ブロックでデフォルトで設定されている「YOUR_JOB関数の処理過程でエラーが発生しました」がブラウザへ送られる。
NB.

NB./*/TEXTAREA/01/HORIZONTAL/150/10/ /NB. contents of this textarea will be saved in try. block of YOUR_JOB function
NB./*/HORIZONTALLINE

NB. ====(3/4) J function definitions for GUI interface =======
NB. テキストソースを作るだけなので,特になし

NB. ====(4/4) describe your job with argument data posted in the form  =======
NB.
YOUR_JOB =: 3 : 0
NB. まず,Form controlのValueをモニターしてみる。
NB. うまくいったら,部品のValueを使って,定義ファイルの中身を作り,デフォルトのファイル名で保存して,生成実験をしてみる。
NB.
try.
 reply_msg =. 'operation has been finished without an error.', CRLF, 'the source displayed above is the def file created.', CRLF, 'app_plan_created_with_posted_info.ijs contains this source now.'

 a_collection =. monitor_entry_ID_values 0

 define_new_app_plan_src 0   NB. src is saved in  'app_plan_created_with_posted_info.ijs'
 a_src =. rff 'app_plan_created_with_posted_info.ijs'

 reply_msg =. a_collection, CRLF, a_src, CRLF, reply_msg

catch.
 reply_msg =. 'YOUR_JOB had an error during the operation.'
end.

reply_msg
)

NB. end of file
