-
Notifications
You must be signed in to change notification settings - Fork 2
/
iron-main-session.el
132 lines (98 loc) · 3.4 KB
/
iron-main-session.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
;;; iron-main-session --- Session handling for the IRON MAIN package.
;;; -*- Mode: Emacs-Lisp; lexical-binding: t -*-
;;; Commentary:
;;
;; The IRON MAIN package interacts with a mainframe -- for the time
;; being, mostly a Hercules emulator -- by using a number of "panels",
;; i.e., a number of buffers that must share some "session"
;; information.
;;
;; This file contans code to handle such sessions.
;;; Code:
(require 'cl-lib)
(require 'iron-main-vars)
;;; iron-main-session
(cl-defstruct (iron-main-session)
"The structure that contains the session data for IRON MAIN."
(machine iron-main-machine)
(os-flavor iron-main-os-flavor)
(id (gensym "iron-main-session#") :read-only t)
)
;;; iron-main-hercules-session
(cl-defstruct (iron-main-hercules-session
(:conc-name iron-main-hs-) ; Let's shorten the names.
(:include iron-main-session))
"IRON MAIN session data for Hercules connection."
(version iron-main-hercules-version :read-only t)
(http-host iron-main-hercules-http-host)
(port iron-main-hercules-http-port)
(pid nil)
(os-dir iron-main-hercules-os-dir)
(dasd-dir iron-main-hercules-dasd-dir)
(card-reader-port iron-main-hercules-card-reader-port)
)
;;; iron-main-ibm-session
;; Just a placeholder for the time being.
(cl-defstruct (iron-main-ibm-session
(:conc-name iron-main-is-)
(:include iron-main-session
(machine "IBM z")
(os-flavor "z/OS"))
)
"IRON MAIN session data for connections to IBM mainframes."
)
;;; iron-main-mts-session
;; Just a placeholder for the time being.
(cl-defstruct (iron-main-mts-session
(:conc-name iron-main-mts-)
(:include iron-main-hercules-session
(machine "IBM z")
(os-flavor "MTS"))
)
"IRON MAIN session data for connections to MTS running on Hercules."
)
;;; iron-main-sessions
;; Global variable.
(defvar iron-main-sessions ()
"The data structure containing the IRON MAIN sessions.")
(defun iron-main-session-add (session)
"Add an IRON MAIN SESSION to the data structure `iron-main-sessions'."
(push session iron-main-sessions))
(defun iron-main-session-find (session-id)
"Find an IRON MAIN session in the data structure `iron-main-sessions'.
The search is done by means od the symbol SESSION-ID."
(cl-find session-id iron-main-sessions
:key 'iron-main-session-id))
(defun iron-main-session-delete (session)
"Deletes a SESSION from the data structure `iron-main-sessions'.
The argument SESSION can be either a `iron-main-session' or a symbol,
in which case it is compared with the slot `id' of the stored
sessions."
(cl-etypecase session
(iron-main-session
(setf iron-main-sessions
(delete session iron-main-sessions)))
(symbol
(setf iron-main-sessions
(cl-delete session iron-main-sessions
:key 'iron-main-session-id)))
))
(cl-defun iron-main-session-start
(&optional
(session-type 'iron-main-hercules-session))
"Start a new IRON MAIN session.
The new session type is determined by the parameter SESSION-TYPE. The
new session is added to the data structure `ireon-main-sessions'."
(let ((new-session
(cl-ecase session-type
(iron-main-hercules-session
(make-iron-main-hercules-session))
(iron-main-ibm-session
(make-iron-main-ibm-session))
))
)
(iron-main-session-add new-session)
new-session))
;;;; Epilogue.
(provide 'iron-main-session)
;;; iron-main-session.el ends here